志在指尖
用双手敲打未来

C#编码规范

命名空间约好
假如没有运用using指令,项目也没有默许导入适宜的命名空间,访问这些命名空间或许类型时,则需求“彻底限制称号”。
namespaceConsoleApp4
{classProgram
{staticvoidMain(string[]args)
{//在这里System.Diagnostics是“彻底限制称号”vartraceSource=newSystem.Diagnostics.TraceSource(“”);
}
}
}
假如运用了Using指令,则不需求“彻底限制称号”。
usingSystem.Diagnostics;namespaceConsoleApp4
{classProgram
{staticvoidMain(string[]args)
{vartraceSource=newTraceSource(“”);
}
}
}
代码布局约好
不轻易更改编辑器的设置,通常运用默许的,特别是格式设置和制表符。
每行一条句子,每行一个声明。
string[]strs=newstring[]{“AA”,”BB”,”CC”};stringstr=”hello”;intnum=4;if(num==9)
{
}
一行写不完的句子,断行写则需求缩进一个制表符位,除了起头的第一行,后边无论再断多少行都是一个制表符位。
string[]strs=newstring[]{“AA”,”BB”,”CC”};varquery=strs.Where(x=>x.Length==2&&x.Contains(“B”)).
Select(x=>new{Name=x,Age=8});
特点和办法之间至少一个空行
publicintMyProperty{get;set;}publicintMyProperty1{get;set;}voidTest()
{
}
运用括号杰出表达式的字句。
intval1=1;
intval2=3;
intval3=4;
if((val1>val2)&&(val1>val3))
{
}
注释约好
独自的行,而非代码末尾;大写字母最初,断行换小写;句点结束注释文本;注释和文本之间留一个空格。
不要在注释周围创建格式化的星号块???没看懂。
下面放一段ILSpy源码
//////Setsthevalueofadependencypropertyonusingamarkupextension.//////Thismethoddoesnotsupportmarkupextensionslikex:Staticthatdependon///havingaXAMLfileascontext.publicstaticvoidSetValueToExtension(thisDependencyObjecttargetObject,DependencyPropertyproperty,MarkupExtensionmarkupExtension)
{//ThismethodwascopiedfromICSharpCode.Core.Presentation(withpermissiontoswitchlicensetoX11)if(targetObject==null)thrownewArgumentNullException(nameof(targetObject));if(property==null)thrownewArgumentNullException(nameof(property));if(markupExtension==null)thrownewArgumentNullException(nameof(markupExtension));varserviceProvider=newSetValueToExtensionServiceProvider(targetObject,property);
targetObject.SetValue(property,markupExtension.ProvideValue(serviceProvider));
}
隐式类型var
当显着能够从赋值右侧推导左边变量类型时,运用var。当准确的类型不太重要时,运用var。
varvar1=”Thisisclearlyastring.”;varvar2=27;varvar3=Convert.ToInt32(Console.ReadLine());
右侧类型不明晰时,则能够声明一个明晰的类型。
usingSystem;namespaceConsoleApp4
{classProgram
{staticvoidMain(string[]args)
{stringtest=GetObject(2);inttest1=GetObject(1);decimaltest2=GetObject(3);
}staticdynamicGetObject(intx)
{switch(x)
{case1:return2;case2:return””;default:return8m;
}
}
}
}
在for循环运用var,下面的i分别推导为int、decimal。
for(vari=0;i<10000;i++)
{
}for(vari=0m;i<10m;i=i+0.1m)
{
}
在foreach中不主张运用var。
DataTabledataTable=newDataTable();//枚举值:EnumerableRowCollection,能够推row为DataRow。foreach(varrowindataTable.AsEnumerable())
{
}//虽然能够推,但声明明晰的类型会让代码更加明晰,因为无法在枚举泛型类型里显着看出当时row的类型。foreach(DataRowrowindataTable.AsEnumerable())
{
}//枚举值:DataRowCollection,不声明明晰类型row则为object?,因而需求声明明晰的类型。foreach(DataRowrowindataTable.Rows)
{
}
符号类型
运用时,符号类型优先于无符号类型。short、int、long。ushort、uint、ulong。
数组
运用间接的语法声明数组
//这时候,无法从右侧推导变量类型。string[]vowels1={“a”,”e”,”i”,”o”,”u”};//能够推导,左边运用varvarvowels2=newstring[]{“a”,”e”,”i”,”o”,”u”};varvowels3=newstring[2];
vowels3[0]=”a”;
vowels3[1]=”e”;
委托
运用简略的语法为委托赋值。
staticvoidMain(string[]args)
{
DelexampleDel2=DelMethod;vardel3=newDel(DelMethod);
}publicdelegatevoidDel(stringmessage);publicstaticvoidDelMethod(stringstr)
{
Console.WriteLine(“DelMethodargument:{0}”,str);
Using
假如运用try…finally…,且在finally只要开释资源的代码,考虑替换成using,using会自动调用Dispose办法。
Fontfont1=newFont(“Arial”,10.0f);try{
}finally{
font1.Dispose();
}using(Fontfont=newFont(“Arial”,10.0f))
{
}
New运算符
能推导类型运用var,目标实例的结构函数没有参数则不用调用结构函数。
//不用运用newExampleClass()varinstance3=newExampleClass
{
Name=”Desktop”,
ID=37414,
Location=”Redmond”,
Age=2.3};varinstance4=newExampleClass();
instance4.Name=”Desktop”;
instance4.ID=37414;
instance4.Location=”Redmond”;
instance4.Age=2.3;c#
事情处理
在事情比较简略、且只运用一次的情况下,能够考虑运用lambda表达式。
publicForm1()
{
InitializeComponent();this.Click+=(s,e)=>{
MessageBox.Show(s.ToString());
};
}
静态成员
派生目标时,不主张添加和基类具有相同称号的静态成员。
usingSystem;namespaceConsoleApp4
{classProgram
{staticvoidMain(string[]args)
{
ExampleClass2.Test();
}
}classExampleClass
{publicstaticvoidTest()
{
Console.WriteLine(“调用ExampleClassTest”);
}
}classExampleClass2:ExampleClass
{//同名简单引起混乱,隐性覆盖了ExampleClass的Test办法。publicstaticvoidTest()
{
Console.WriteLine(“调用ExampleClass2Test”);
}
}classExampleClass3:ExampleClass
{//运用new,说明有意覆盖。publicnewstaticvoidTest()
{
}
}
}
Linq查询表达式
匿名类型遵从Pascal大小写格式(与骆驼命名法相似,骆驼命名法是首字母小写,而Pascal帕斯卡命名法是首字母大写)。
varlocalDistributors=fromcustomerincustomers
joindistributorindistributorsoncustomer.Cityequalsdistributor.Cityselectnew{
Customer=customer,
Distributor=distributor,
CustometorId=customer.ID
};
在查询变量和范围变量的声明中运用隐式类型化,虽然查询变量没有明晰标有var关键字,但确实隐式化了。
usingSystem;usingSystem.Linq;namespaceConsoleApp4
{classProgram
{staticvoidMain(string[]args)
{varcustomers=newSystem.Collections.Generic.List();vardistributors=newSystem.Collections.Generic.List();varlocalDistributors=fromcustomerincustomers
joindistributorindistributorsoncustomer.Cityequalsdistributor.Cityselectnew{
Customer=customer,
Distributor=distributor,
CustometorId=customer.ID
};
}
}internalclassDistributor
{publicobjectCity{get;internalset;}
}internalclassCustomer
{publicobjectCity{get;internalset;}publicobjectID{get;internalset;}
}
}
对其from字句下面的查询句子。
//第一种:from句子不和声明变量同一行,则在下一行缩进一个制表符。
varlocalDistributors=fromcustomerincustomers
joindistributorindistributorsoncustomer.Cityequalsdistributor.Cityselectnew{
Customer=customer,
Distributor=distributor,
CustometorId=customer.ID
};//第二种:from句子和声明变量同一行varlocalDistributors=fromcustomerincustomers
joindistributorindistributorsoncustomer.Cityequalsdistributor.Cityselectnew{
Customer=customer,
Distributor=distributor,
CustometorId=customer.ID
};

未经允许不得转载:IT技术网站 » C#编码规范
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

志在指尖 用双手敲打未来

登录/注册IT技术大全

热门IT技术

C#基础入门   SQL server数据库   系统SEO学习教程   WordPress小技巧   WordPress插件   脚本与源码下载