zoukankan      html  css  js  c++  java
  • 第十讲: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)

     

  • 相关阅读:
    另一种阶乘问题
    韩信点兵
    java字符串大小写转换
    实现对字符串数组{"Allen","Smith","James","Martin","Ford"} 求得包含字母a的所有的名字
    将一维数组中的0去掉,不为0的项存入一个新的数组中
    hibernate -- HQL语句总结
    oracle intersect 取交集
    Spring中applicationContext.xml的bean里的id和name属性区别
    spring 源码分析
    python爬虫
  • 原文地址:https://www.cnblogs.com/iceberg2008/p/1404219.html
Copyright © 2011-2022 走看看