C#的类 (1)字段:在类内定义的变量成员成为字段。 静态字段static:用修饰符static声明的字段称为静态字段,它属于类而不属于某个对象。 实例字段:未使用static修饰的字段。 只读字段:使用readonly修饰的字段,只能在字段声明或构造函数中重新赋值,在其他任何地方都不能改变只读字段的值。 常量:使用const修饰的字段,只能在声明中初始化,以后不能再修改。 (2)创建对象 <对象名>=new <构造方法名>([参数列表]); 如为Car类创建一个对象:
Car myCar=new Car();(3)this指针 当每个对象呗调用时,this便引用该对象(即引用该对象的地址)。 两种基本的用法:1)访问当前类成员;2)在声明构造函数时指定需要先执行的构造函数。 this用于构造函数:其中this表示该类本身所声明的、形式参数表和实际参数表最匹配的另一个实例构造函数,这个构造函数会在执行正在声明的构造函数之前执行。
<访问修饰符> 类名(形式参数):this(实际参数表) { ........//语句块; }(4)属性 访问器get和set
get { return 要访问的成员; } set { 要设置值的成员=value; }如:
public class Date { private int month; public int Month { get{return month;} set { if(value>0&&value<=12) month=value; } } }继承与多态 (1)继承,C#中类的继承只支持单一继承,不支持多重继承。 派生类构造函数自动调用基类不带参数的构造函数; (2)隐藏基类成员:1)使用密封类(sealed)可以防止对类的继承。
sealed class A { ..... } public class B:A //错误,类A是密封类,不能被继承 {....}在重写基类中的虚方法或许属性上使用sealed修饰符,这样可以防止派生类重写基类的特定虚方法或虚属性。
class A { public virtual void F(){.....} public virtual void G(){.....} } class B:A { sealed override public void F(){....} //F()是密封方法 override public void G(){.....} } class C:A { override public void G(){.....} }2)使用new修饰符可以显式隐藏从基类继承的成员。
public class Father { public int x; public int y; } public class Son:Father { new public static int x=100; //利用new隐藏基类的x .... }(3)多态性:同一操作作用域不同的类实例,将进行不同的解释,最后产生不同的执行结果。 虚方法用virtual修饰符的方法。虚方法可以由派生类方法取代,它的执行方式可以被派生类改变,取代所继承的虚方法实现的过程称为重写(override)该方法。 如:
class Father { public virtual string method() { return "virtual Method"; } } class Son:Father { public override string method { return "override method"; } }抽象类和接口 (1)抽象方法,声明一个方法时,在前面加上abstract。除非派生类依然是抽象类,否则抽象类的派生类必须提供抽象方法的实现代码。抽象类不能实例化,但是可以引用子类对象;抽象类不能同时是 密封类
abstract class Animal //抽象基类 { public abstract void Method(); //抽象方法 } class Dog:Animal { public override void Method() { .......//实现抽象方法 } }(2)接口,是一种引用数据类型,使用interface关键字声明。接口的名称通常以“I”开头。
属性 接口修饰符 interface 接口名:基接口 { ......//接口成员 }如:
public interface IImage { int DeleteImage(); void DisplayImage(); }接口继承:派生接口继承了基接口中的函数成员说明,而没有继承富接口的实现;接口继承允许多重继承,一个派生接口可以由多个基接口。 接口实现:接口声明只包含成员的定义,而没有实现代码。接口中的成员都必须在其派生类中实现。 如果一个派生类既继承自基类又实现接口,那么在声明派生类的基类列表中,要先写基类再写接口,否则会出现编译错误。
