C# CLASS 相关知识

类:两个理解角度,
      * 用来描述问题域的抽象
      * 用来创建对象的蓝图。

类的构成:

Class Name
{
    数据成员:
         实例变量
         静态变量
         函数参数,返回值
         嵌套类型(class/struct/enmu/interface)
  
   函数成员:
          构造函数
          析构函数
          行为方法(实例方法、静态方法)
          属性:用来访问Private变量的get+用来修改Private变量的set
          索引器:用来访问类中的数组
          操作符:重载
   
   嵌套类型成员(class/struct/enmu/interface):
         只在此类中是使用的类、结构、枚举、接口等,降低类型描述的复杂性
}

实例方法:

同一个类的不同对象共享同一方法的拷贝,编译器会将对象作为一个参数暗自传送给实例方法。
而不是为每个实例都创建一个拷贝,从而节省资源。

方法参数:
1. ref 引用类型参数
2. out 也是引用类型参数,但是可以使用尚未赋值的变量
3. 参数数组的问题:可以接受不同数量的参数,即用任意多个和参数数组类型相同的变量作为参数
                   只能写在参数的最末一个(int a,int b, params int[] number)
                   只能是一维数组 int[,]不可用,int[][]可以
                   不能与ref/out 同时使用


方法重载: 重载的条件是方法信号不同,方法信号包括方法名字,参数数量、类型和顺序
           返回类型,params 参数,形式参数的名字都忽略。

this 的使用情况:
           区分形式参数、本地变量与实例变量
           将当前对象的引用作为一个参数传递给另一个方法
           将当前对象的引用 返回给此方法的调用者


构造函数:
   * 如果类中包含一个或多个实例构造函数,那么编译器不会为类添加缺省的构造函数。
   * 在全是静态成员的类中,也可以使用Private的构造函数
   * 可以定义静态的构造函数,用于执行在第一个实例对象创建前要做的事情。不能添加访问修饰符和参       数,其形式为 static className() { ... },由运行时自动调用。
   * 通过使用构造函数初始化器(: this( parma1,param2...))可以减少不同构造函数中包含重复代码

只读成员与常量的异同:
    同:都用来表示一个不变化的值
    异:常量在源代码中指定值,只读成员在运行时赋值,比如银行账号就适合作为只读变量在创建时构造          函数中赋值。
 
析构函数:
在C#中,一般是不用程序员去编写GC或者析构函数的,系统会自动进行垃圾回收。如果写了析构函数,反而会影响效率。只有在处理特定的资源时,比如非托管代码的资源时,可以自己编写析构函数来释放资源。

Dipose:用于释放非内存有限资源的释放。可以摆脱析构函数执行的不定时性。
       为了避免因dispose和析构函数删除同一对象两次引起的运行时错误,可以在dispose方法中使用GC.SuppressFinalize

如何编写直观易懂的代码:

 属性的使用,在功效上和存取器相同,因为内联技术甚至更快,但是使用混合get、set的属性可以使的对对象私有成员的赋值形式与"="形式保存一致;而且可以延迟不必要的初始化工作。

 索引器的使用, 将集合类型的数据写成一个类,并可以添加一些方法,更直观的是对于这样的数组访问可以使用和数组形式一致的方式,对象名[索引值],索引值可以是各种类型。

 操作符重载:为了保持语义和形式的一致性,操作符重载是一个不错的方式,但是有几点要注意:比较操作符(<和>,>=和《=,==和!=)必须成对重载,二元操作符的话第一个参数必选是操作符所属类型。必须声明为pubic staic

自定义用户类型准换:
     隐式转换:public static implicit operator Type_Convert_TO(Type_Convert_From)
     显式转换:public static explicit operator Type_Convert_To(Type_Convert_From

posted @ 2010-01-20 14:57  frankself008  阅读(747)  评论(0编辑  收藏  举报