基础知识

(class)

 

对象(object):类的实例。

 

传参:包括按值传参和按引用传参。

按值传参时,传的是参数的副本,方法内部对参数的改变不改变参数本身。按引用传参时,传的是实例的引用,方法内对参数的改变影响参数本身。

 

常量:定义时就必须初始化,但可以计算。例如 public const int A = 1; public const int B = A + 1;

 

枚举:[性质] [修饰符] enum 标识符 [:基类型] {枚举列表}

标识符即枚举的名字。基类型默认是int,可为除char外的任意整数类型。枚举列表内容以逗号分隔,项目的值默认从0开始,后一个比前一个多1。例如 enum Values { x, y, z = 20, i, j }    其中x=0,y=1,z=20,i=21,j=22。

 

构造方法:CLR底层将所有字段清零,创建一个有效对象,然后执行用户自定义的构造方法。

 

静态构造方法:没有访问修饰符,不能访问非静态成员变量。静态构造方法必须保证在创建实例前运行。

 

静态类:不能派生子类,不包含非静态成员,没有构造方法,不能被实例化。

 

静态字段:通常用来表示类的实例数目。例如:

public class Cat

{

      // 静态字段不会在创建实例时初始化,所以必须在类中初始化。

      // 编程时最好将成员数据设为私有,调用方法显示数据内容。

      private static int count = 0;

 

      // 构造方法,直接使用静态字段

      public Cat () { count++; }   

 

      // 调用静态字段的静态方法

      public static HowManyCats () { Console.WriteLine ( "{0} cats adopted", count ); }

}

 

析构方法与Dispose、Close方法

析构方法由编译器调用,用户无法主动调用。

Dispose:要自定义Dispose方法需实现IDisposable接口。

Close:可将Dispose方法建为私有,设Close为公共方法,用Close内部调用Dispose方法。

 

using语句:用大括号括起来的部分,运行结束后调用Dispose方法。

无论如何离开using,Dispose都会被调用,类似于隐藏的try - catch - finally块。

 

签名:是用方法名和参数列表定义的,其中有一个不同,签名就不同。

 

多态:类 - 继承。

         方法 - 重用。基方法用virtual修饰,派生方法用override修饰,用base调用基类方法,用派生类的对象直接调用派生类方法。

例如   public class Control {

               public Control { ... } // 构造方法

               public virtual void DrawWindow () { ... }

         }

         public class ListBox : Control {

               public ListBox : base { ... }

               public override void DrawWindow () { ... }

         }

 

抽象类(abstract):

1. 若一个方法被定义为抽象的,他所在的类也是抽象的。

2. 抽象类不可创建对象(不可实例化)。

3. 抽象方法没有实现,只创建方法名和属性。

4. 如抽象类的派生子类没有实现基类的所有抽象方法,派生子类也是抽象的。

5. 抽象类对派生类的派生子类不用强制实现抽象类的抽象方法,例如 抽象类Control,派生类ListBox,ListBox的派生子类DropListBox,DropListBox不用实现Control的抽象方法。

6. 与抽象类同效果的做法是定义接口,由类实现接口。

 

密封(sealed):密封类不允许被继承。

 

嵌套类

1. 嵌套类的方法可访问外层类的所有成员(包括私有成员)。

2. 创建嵌套类的实例须指定外层类的类型名,例如 Outer是外层类,Nested是嵌套类,Nested实例化为 Outer.Nested a = new Outer.Nested ()

3. 嵌套类作用域仅在外层类中。

 

结构体

1. 结构体是值类型,类是引用类型。

2. 结构体不支持继承和析构函数。

3. 结构体数组(类型一致)内存使用方面效率好,非类型一致集合中效率差;类在大的集合中效率好。

4. 结构体没有析构函数或自定义的默认构造方法。

5. 结构体不能初始化。

6. 结构体可以继承多个接口。

7. Console.WriteLine ( "{0}", num );   // int num = 0; 

    * 如果只用结构体,则结构体/值类型会封装成对象,然后调用object的ToString方法。如果不想封装,则写成

    Consolr.WriteLine ( "{0}", num.ToString() );   因为值类型都会覆盖ToString方法。

 

接口

1. 一般接口名的首字母是I。

2. 接口方法隐含就是public,所以不需有访问修饰符。

3. 可利用接口的继承性扩展和组合接口。

4. as操作符检查是否实现接口,若实现,转换为接口类型,若没有,返回null。

5. 显式实现接口不能用访问修饰字,隐含为公共;不能通过对象本身访问,必须转换成接口,例如:

     interface IStorable {

          void Read ();

          void Write ( Object obj );

     }

     class Document : IStorable {

          void IStorable.Read () { ... }

          void Write ( Object obj ) { ... }

     }

调用   

     Document doc = new Document ();

     IStorable istor = doc as IStorable;

     if ( istor != null )   istor.Read ();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值