|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。 今天买了一本《EffectiveC#》,看了几个Item,固然没有现在读《EffectiveC++》时的那般震动,可是也劳绩很多。把个中的要点纪录于下,有些条目加上了本人的了解,权看成念书条记吧:-)
Item1:AlwaysUsePropertiesInsteadofAccessibleDataMembers
这个是地球人都晓得的条目了。你必要记着,属性是类的内部接口部分,而(大众)成员倒是外部完成。假如把外部完成表露给内部,关于今后类的完成变动长短常倒霉的。 Item2:Preferreadonlytoconst
这个条目必要注重一下几点:
(1)const在编译期产生感化,即编译器会将一切的const成员置换成对应的常量“值”。
(2)即便援用其他程序会合的const成员,本程序会合也是硬编码了const成员的值。
(3)readonly在运转期被评价,以是其功能比const稍差,可是天真性更高。
(4)const的值必需在编译期决意,以是不克不及利用new为其赋值。
(5)更新一个私有的const成员的值应被视为接口改动,而更新一个readonly变量的值可视为外部完成的改动。
Item3:PrefertheisorasOperatorstoCasts
(1)is或as称为“静态转换”,是实验性的,假如失利,不会抛出非常。尽量利用as操纵符。该机制利用元数据完乐成能。
(2)Cast称为“强迫转换”,假如失利,则抛出非常--价值奋发。
(3)is、as、Cast转换都不会挪用自界说的转换操纵符。
(4)is能够判别一个object是不是为值范例,而as不可。
(5)请注重Type.IsAssignableFrom()和Type.IsSubclassOf()办法,他们也是经常使用的“范例检测”手腕。注重,Type.IsSubclassOf()办法不撑持接口检测,而Type.IsAssignableFrom()撑持。
Item4:UseConditionalAttributesInsteadof#if
利用#if常(大概)招致功能成绩(如空办法挪用)和程序对#if/#endif块代码的依附成绩。
(1)利用ConditionalAttributes润色的办法老是会被编译到方针程序会合,不管是Release或Debug。
(2)假如前提不满意该ConditionalAttributes指定的前提,则编译器会疏忽一切对其润色的办法的挪用。
(3)被ConditionalAttributes润色的办法必需前往void,这是有事理的。由于我们的程序运转不克不及依附被ConditionalAttributes润色的办法的前往值。不然,在分歧的前提下,我们的程序将体现出非我们希冀的不必举动。
Item5:AlwaysProvideToString()
关于这一点,我在以往的项目中早有体味。举个例子,已经我们必要把从数据库中掏出的Customer列表绑定到ComboBox,入手下手时我们计划Customer时并没有重写ToString()办法,以是我们要如许做:
//从数据库中挑出一切无效用户
stringwhereStr=string.Format("where{0}=1",Customer._IsValid);
Customer[]customers=(Customer[])DataEntrance.GetObjects(typeof(Customer),whereStr);
ArrayListcusNameList=newArrayList();
foreach(Customercusincustomers)
{
cusNameList.Add(string.Format("{0}{1}",cus.ID,cus.Name));
}
//绑定
this.comboBox1.DataSource=cusNameList; 假如为Customer重写ToString()办法,
#regionToString
publicoverridestringToString()
{
returnthis.ID.ToString()+""+this.Name.ToString();
}
#endregion 则只必要如许:
stringwhereStr=string.Format("where{0}=1",Customer._IsValid);
Customer[]customers=(Customer[])DataEntrance.GetObjects(typeof(Customer),whereStr);
this.comboBox1.DataSource=customers; 如许就烦琐了很多多少,并且如许做另有一个优点,好比,从ComboBox从拔取一个客户时,之前必要如许:
stringcusID=this.comboBox1.SelectedItem.ToString().Split()[0];
CustomerdesCus=null;
foreach(Customercusincustomers)
{
if(cus.ID=cusID)
{
desCus=cus;
break;
}
}
如今,复杂多了,一行代码弄定。
CustomerdesCus=this.comboBox1.SelectedItemasCustomer;说句实话,Java跨平台根本就不是外行人想想的那种,一次编译,处处运行。 |
|