仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 631|回复: 6
打印 上一主题 下一主题

[学习教程] 来一篇关于NET的C#编程中的66个好习气

[复制链接]
精灵巫婆 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 14:21:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
中间码是基于一个虚拟机器。源代码是最高层的,理论上从源代码开始直接编译成本地码能提供最大优化的。而中间码只能是转译成本地码,效率上难免受到损耗。根据虚拟机器所设定的体系结构的特点,和本地机器的差异的多少。1.制止将多个类放在一个文件内里。
2.一个文件应当只要一个定名空间,制止将多个定名空间放在统一个文件内里。
3.一个文件最好不要凌驾500行的代码(不包含呆板发生的代码)。
4.一个办法的代码长度最好不要凌驾25行。
5.制止办法中有凌驾5个参数的情形。利用布局来传送多个参数。
6.每行代码不要凌驾80个字符。

7.不要手工的修正呆板发生的代码。
a)假如必要编纂呆板发生的代码,编纂格局微风格要切合该编码尺度。
b)Usepartialclasseswheneverpossibletofactoroutthemaintainedportions.

8.制止使用正文注释不言而喻的代码。
a)代码应当能够自注释。好的代码由可读的变量和办法定名因而不必要正文。

9.Documentonlyoperationalassumptions,algorithminsightsandsoon.
10.制止利用办法级的文档。
a)利用扩大的API文档申明之。
b)只要在该办法必要被其他的开辟者利用的时分才利用办法级的正文。(在C#中就是///)

11.不要硬编码数字的值,老是利用机关函数设定其值。
12.只要是天然布局才干间接利用const,好比一个礼拜的天数。
13.制止在只读的变量上利用const。假如想完成只读,能够间接利用readonly。
publicclassMyClass{
publicreadonlyintNumber;
publicMyClass(intsomeValue)
{
Number=someValue;
}
publicconstintDaysInWeek=7;
}

14.每一个假定必需利用Assert反省
a)均匀每15行要有一次反省(Assert)
usingSystem.Diagnostics;
objectGetObject(){…}
objectobj=GetObject();
Debug.Assert(obj!=null);

15.代码的每行都应当经由过程白盒体例的测试。
16.只抛出已显现处置的非常。
17.在捕捉(catch)语句的抛出非常子句中(throw),老是抛出原始非常保护原始毛病的仓库分派。
catch(Exceptionexception)
{
MessageBox.Show(exception.Message);
throw;//和throwexception一样。
}

18.制止办法的前往值是毛病代码。
19.只管制止界说自界说非常类。
20.当必要界说自界说的非常时:
a)自界说非常要承继于ApplicationException。
b)供应自界说的序列化功效。

21.制止在单个程序集里利用多个Main办法。
22.只对外发布需要的操纵,其他的则为internal。
23.Avoidfriendassemblies,asitincreasesinter-assemblycoupling.
24.Avoidcodethatreliesonanassemblyrunningfromaparticularlocation.
25.使使用程序集只管为最小化代码(EXE客户程序)。利用类库来交换包括的商务逻辑。
26.制止给列举变量供应显式的值。
//准确办法
publicenumColor
{
Red,Green,Blue
}
//制止
publicenumColor{
Red=1,Green=2,Blue=3
}

27.制止指定特别范例的列举变量。
//制止
publicenumColor:long{Red,Green,Blue}

28.即便if语句只要一句,也要将if语句的内容用年夜括号扩起来。
29.制止利用trinary前提操纵符。
30.制止在前提语句中挪用前往bool值的函数。可使用部分变量并反省这些部分变量。
boolIsEverythingOK()
{…}
//制止
if(IsEverythingOK())
{…}
//交换计划
boolok=IsEverythingOK();
if(ok)
{…}

31.老是利用基于0入手下手的数组。
32.在轮回中老是显式的初始化援用范例的数组。
publicclassMyClass{
MyClass[]array=newMyClass[100];
for(intindex=0;index<array.Length;index++)
array[index]=newMyClass();
}

33.不要供应public和protected的成员变量,利用属性取代他们。
34.制止在承继中利用new而利用override交换。
35.在不是sealed的类中老是将public和protected的办法标志成virtual的。
36.除非利用interop(COM+或其他的dll)代码不然不要利用不平安的代码(unsafecode)。
37.制止显现的转换,利用as操纵符举行兼容范例的转换。
Dogdog=newGermanShepherd();
GermanShepherdshepherd=dogasGermanShepherd;
if(shepherd!=null)
{…}

38.当类成员包含托付的时分
a)Copyadelegatetoalocalvariablebeforepublishingtoavoidconcurrencyracecondition.
b)在挪用托付之前必定要反省它是不是为null
publicclassMySource
{
publiceventEventHandlerMyEvent;
publicvoidFireEvent()
{
EventHandlertemp=MyEvent;

if(temp!=null)
{
temp(this,EventArgs.Empty);
}
}
}

39.不要供应大众的事务成员变量,利用事务会见器交换这些变量。
publicclassMySource
{
MyDelegatem_SomeEvent;
publiceventMyDelegateSomeEvent
{
add
{
m_SomeEvent+=value;
}
remove
{
m_SomeEvent-=value;
}
}
}

40.利用一个事务匡助类来发布事务的界说。
41.老是利用接口。
42.类和接口中的办法和属性最少为2:1的比例。
43.制止一个接口中只要一个成员。
44.只管使每一个接口中包括3-5个成员。
45.接口中的成员不该该凌驾20个。
a)实践情形大概限定为12个
46.制止接口成员中包括事务。
47.制止利用笼统办法而利用接口交换。
48.在类条理中显现接口。
49.保举利用显式的接话柄现。
50.从不假定一个范例兼容一个接口。
Defensivelyqueryforthatinterface.
SomeTypeobj1;
IMyInterfaceobj2;
/*假定已有代码初始化过obj1,接上去*/
obj2=obj1asIMyInterface;
if(obj2!=null)
{
obj2.Method1();
}
else
{
//处置毛病
}

51.体现给终极用户的字符串不要利用硬编码而要利用资本文件交换之。
52.不要硬编码大概变动的基于设置的字符串,好比毗连字符串。
53.当必要构建长的字符串的时分,利用StringBuilder不要利用string
54.制止在布局内里供应办法。
a)倡议利用参数化机关函数
b)能够重裁操纵符

55.老是要给静态变量供应静态机关函数。
56.能利用初期绑定就不要利用前期绑定。
57.利用使用程序的日记和跟踪。
58.除非在不完整的switch语句中不然不要利用goto语句。
59.在switch语句中老是要有default子句来显现信息(Assert)。
intnumber=SomeMethod();
switch(number)
{
case1:
Trace.WriteLine("Case1:");
break;
case2:
Trace.WriteLine("Case2:");
break;
default:
Debug.Assert(false);
break;
}

60.除非在机关函数中挪用其他机关函数不然不要利用this指针。
//准确利用this的例子
publicclassMyClass
{
publicMyClass(stringmessage)
{
}
publicMyClass():this("hello")
{
}
}

61.除非你想重写子类中存在称号抵触的成员大概挪用基类的机关函数不然不要利用base来会见基类的成员。
//准确利用base的例子
publicclassDog
{
publicDog(stringname)
{}
virtualpublicvoidBark(inthowLong)
{}
}
publicclassGermanShepherd:Dog
{
publicGermanShepherd(stringname):base(name)
{}
overridepublicvoidBark(inthowLong)
{
base.Bark(howLong);
}
}

62.基于模板的时分要完成Dispose()和Finalize()两个办法。
63.一般情形下制止有从System.Object转换来和由System.Object转换往的代码,而利用强迫转换大概as操纵符交换。
classSomeClass
{}
//制止:
classMyClass<T>
{
voidSomeMethod(Tt)
{
objecttemp=t;
SomeClassobj=(SomeClass)temp;
}
}
//准确:
classMyClass<T>whereT:SomeClass
{
voidSomeMethod(Tt)
{
SomeClassobj=t;
}
}

64.在一样平常情形下不要定影无限制符的接口。接口的限定级别一般能够用强范例来交换之。
publicclassCustomer
{…}
//制止:
publicinterfaceIList<T>whereT:Customer
{…}
//准确:
publicinterfaceICustomerList:IList<Customer>
{…}

65.不断定在接口内的详细办法的限定前提。
66.老是选择利用C#内置(一样平常的generics)的数据布局。学习asp.net两个月有余了,除了对html、web控件比较熟悉(应该是说都能理解和接受)之外,竟不知道自己还会什么。看了两本书:《精通asp.net网络编程》(人民邮电出版社)、《asp.net实用案例教程》(清华大学出版社)。
分手快乐 该用户已被删除
沙发
发表于 2015-1-18 13:37:52 | 只看该作者
asp.net空间的支持有:ASP.NET1.1/虚拟目录/MicrosoftFrontPage2000扩展/CDONTS,同时他的网站上也提供了Asp.net的使用详解和程序源代码,相信对使用ASP.NET编程的程序员来说会非常有用哦!
愤怒的大鸟 该用户已被删除
板凳
发表于 2015-2-10 07:10:24 | 只看该作者
目前在微软的.net战略中新推出的ASP.net借鉴了Java技术的优点,使用CSharp(C#)语言作为ASP.net的推荐语言,同时改进了以前ASP的安全性差等缺点。但是,使用ASP/ASP.net仍有一定的局限性,因为从某种角度来说它们只能在微软的WindowsNT/2000/XP+IIS的服务器平台上良好运行(虽然像ChilliSoft提供了在UNIX/Linux上运行ASP的解决方案.
谁可相欹 该用户已被删除
地板
发表于 2015-3-1 04:22:01 | 只看该作者
ASP.net的速度是ASP不能比拟的。ASP.net是编译语言,所以,当第一次加载的时候,它会把所有的程序进行编译(其中包括worker进程,还有对语法进行编译,形成一个程序集),当程序编译后,执行速度几乎为0。
飘灵儿 该用户已被删除
5#
发表于 2015-3-10 12:54:19 | 只看该作者
Servlet却在响应第一个请求的时候被载入,一旦Servlet被载入,便处于已执行状态。对于以后其他用户的请求,它并不打开进程,而是打开一个线程(Thread),将结果发送给客户。由于线程与线程之间可以通过生成自己的父线程(ParentThread)来实现资源共享,这样就减轻了服务器的负担,所以,JavaServlet可以用来做大规模的应用服务。
admin 该用户已被删除
6#
发表于 2015-3-17 07:45:34 | 只看该作者
是目前ASP在UNIX/Linux上的应用可以说几乎为0)。所以平台的局限性和ASP自身的安全性限制了ASP的广泛应用。
若相依 该用户已被删除
7#
发表于 2015-3-24 03:05:48 | 只看该作者
微软又推出ASP.NET。这不是ASP的简单升级,而是全新一代的动态网页实现系统,用于一台WEB服务器建立强大的应用程序。是微软发展的新体系结构.NET的一部分,是ASP和.NET技术的结合。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-17 04:46

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表