第十讲:C#中的一些设计技巧
*编码习惯
1、命名规范,接口用I开头做前缀,异常类使用Exception作为其后缀。
public class MyClass
{
int myNum=0;
public MyMethod(int refObject){}
}
interface IMyInterface{...}
public class MyEventException{...}
2、使用有意义的变量名称和名称空间。有返回值的方法GetMyObjectState().要设定值的方法SetMyObjectState().
3、所有的成员变量都应该声明在顶部,同时使用一个空行来将他们和属性以及方法分开。
4、总是将大括号放在一个新行上。
* Equals()
考虑覆写Equals(object obj)
.NET提供了默认的实现方法(引用指向同一对象)
.NET将在比较和查询时使用这个方法。
实现自己比较的“相等”定义,你需要覆写这个方法。
*自定义Equals
如果两个客户姓名相等,我们认为对象是相等的。
pulbic class BankCustomer
{
public string FirstName;
public string LastName;
......
public override bool Equals(object obj)
{
if(obj==null) return false;
if((obj.GetType().Equals(this.GetType()))==false) return false;
BankCustomer other;
other=(BankCustomer) obj;
return this.FirstName.Equals(other.FirstName) && this.LastName.Equals(other.LastName);
}
}
*GetHashCode()
如果覆写了Equals,也需要覆写GetHashCode(警告)
如果两个对象Equals,GHC必须返回相同的值
根据Equals定义字段来定义GHC
pulbic class BankCustomer
{
public string FirstName;
public string LastName;
......
public override int GetHashCode()
{
rturn this.FirstName.GetHashCode()+this.LastName.GetHashCode();
}
}
*补充知识
Hashtable
Hashtable 提供高效的搜索
基于(key,value)pairs(键/值)对--键必须是唯一的
可以通搜索key来查找
using sc=System.Collections;
sc.Hashtable customers;
customers=new sc.Hashtable();
customers.Add(12345,new BanckCustomer());
customers.Add(67890,nwe BanckCustomer());
......
BankCustomer c;
c=(BankCustomer) customers[67890];
foreach(sc.DictionaryEntry hte in customers)
((BankCustomer)hte.Value).Balance+=250.00M;
*IDisposable
一些对象需要清理:
System.IO.StreamWriterfile;
file=new System.IO.StreamWriter("file.txt");
file.WriteLine(...);
......
file.Dispose();//flush writes & free file handle;
Dispose()
类中是否“抓住”资源?
a)重新设计类
b)实现IDisposable接口,并提供Dispose & Close 方法
*ICIoneable
如果需发实现克隆功能,那么要实现ICloneable接口
public class BankCustomer:ICloneable
{
......
public object Clone()
{
return new BankCustomer(this.FirstName,this.LastName,this.Balance);
//相当于:
return this.MemberwiseClone();//浅表副本
}
}
*String相关知识
string是不可变的对象。
字符串连接操作并不更改当前字符串,只是创建并返回新的字符串,速度慢。
StringBuilder的字符串连接
频繁进行字符串连接操作时,使用StringBuilder类来改善性能,连接操作越频繁,差别越明显。
字符串驻留
public static Intern(String str)
public static isIntern(String str)