l索引器提供了一种访问类或结构的方法,即允许按照与数组相同的方式对类、结构或接口进行索引。
lpublic int this[int index] //索引器声明
l {
l // get和set访问器
l }
l委托对象封装多个方法
l 委托对象可以封装多个方法,这些方法的集合称为调用列表。委托使用“+”、“-”、“+=”和“-=”等运算符向调用列表中增加或移除事件处理方法。
lC#中只允许单继承,即一个派生类只能有一个基类。
lC#中继承是可传递的,如果C从B派生,B从A派生,那么C不仅继承B的成员,还继承A的成员。
lC#中派生类可添加新成员,但不能删除基类的成员。
lC#中派生类不能继承基类的构造函数和析构函数,但能继承基类的属性。
lC#中派生类可隐藏基类的同名成员,如果在派生类可以隐藏了基类的同名成员,基类该成员在派生类中就不能被直接访问,只能通过“base.基类方法名”来访问。
lC#中派生类对象也是基类的对象,但基类对象却不一定是基派生类的对象。也就是说,基类的引用变量可以引用基派生类对象,而派生类的引用变量不可以引用基类对象。
多态性
l方法1:在使用新的派生方法替换基方法时应使用new关键字。
lclass A
l{ public void fun()
l {
l Console.WriteLine("A");
l }
l}
lclass B:A
l{ new public void fun()//隐藏基类方法fun
l {
l Console.WriteLine("B");
l }
l}
lvirtual关键字
lvirtual关键字用于修饰方法、属性、索引器或事件声明,并且允许在派生类中重写这些对象。
l注意:不能重写非虚方法或静态方法。重写的基方法必须是virtual、abstract或override的。
l在类声明中使用abstract修饰符的类称为抽象类。抽象类具有以下特点:
l抽象类不能实例化。
l抽象类可以包含抽象方法和抽象访问器。
l抽象类中可以存在非抽象的方法。
l 不能用sealed修饰符修改抽象类,这也意味着抽象类能被继承。
l从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实现。
l抽象类可以被抽象类所继承,结果仍是抽象类。
l接口只包含成员定义,不包含成员的实现,成员的实现需要在继承的类或者结构中实现。接口的成员包括方法、属性、索引器和事件,但接口不包含字段。
l[接口修饰符] interface
接口名[:父接口列表]
l {
l //接口成员定义体
l }
l当一个类实现一个接口时,这个类就必须实现整个接口,而不能选择实现接口的某一部分。
l一个接口可以由多个类来实现,而在一个类中也可以实现一个或多个接口。
l 一个类可以继承一个基类,并同时实现一个或多个接口。
l1. 隐式实现接口成员
l若要隐式实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。
l2. 显式实现接口成员
l显式接口成员实现不能使用任何修饰符。