C#接口特性
访问修饰符 interface 接口名
{
//接口成员
}
可以使用public、protected、private和internal修饰符声明接口,但接口成员必须是public。
接口可包含方法、属性、事件或索引器这4种成员类型,但不能包含字段(什么是字段?),也不能设置这些成员的具体值,即只能定义,不能赋值。
接口具体以下特性:
- 不能直接实例化接口
- 接口可以包含方法、属性、事件或索引器
- 接口不包含方法的实现
- 继承接口的任何非抽象类型都必须实现接口的所有成员
- 类和结构以及接口本身都可以从多个接口继承
接口成员的定义与类成员相似,但需要注意以下几点区别:
- 接口成员不能包含代码体
- 接口成员不能用关键定static、abstarct、virtual或sealed定义
- 接口不能包含类型定义
多态
在C#中,类的多态性是通过在子类中重写或隐藏基类的方法或函数成员来实现的。
1. 方法的重写与隐藏
class Animal
{
public virtual void HasHairy(){
Console.WriteLine("我是有毛动物");
}
public void Barking(){
Console.WriteLine("我叫了一声");
}
}
class Dog : Animal
{
public override void HasHairy(){
Console.WriteLine("我是狗,我是有毛动物");
}
public new void Barking(){
Console.WriteLine("我的叫声是汪");
}
}
class Cat : Animal
{
public override void HasHairy(){
Console.WriteLine("我是猫,我是有毛动物");
}
public new void Barking(){
Console.WriteLine("我的叫声是喵");
}
}
基类中的virtual方法需要在子类中通过override重写,而非virtual方法可以使用new来隐藏,不隐藏的话则会调用父类中的同名方法。
索引器(Indexer)
索引器的一种类成员,它使得类中的对象可以象数组那样被引用。索引器只能作用于类对象。
索引器的5种保护级别:new/public/protected/internal/private
访问修饰符补充
- new:在用作修饰符时, new 关键字可以显式隐藏从基类继承的成员。
- public:public 修饰符使类的成员对于可访问该类的所有代码都可见。
- protected:protected 标识符使类或接口的成员仅在该类或接口以及当前类的所有派生类中可见。 当前类之外的代码无法访问 protected 成员。
- internal:internal 修饰符使类、接口或成员仅在当前包中可见。 当前包之外的代码不能访问 internal 成员。
- private:private 修饰符使一个类的成员仅在该类中可见。 当前类(包括派生类)之外的代码不能访问 private 成员。
索引器的4种继承行为:virtual/sealed/override/abstract
索引器可以被重载,但不能为static
声明索引器语法:
访问修饰符 数据类型 this[参数列表]
{
//get/set 访问器
}
索引器与数组区别如下:
- 索引器的索引值类型不受限制
- 索引器可以被重载
- 索引器不是一个变量
索引器与属性的区别如下:
- 属性以名称来标识,索引器以函数形式标识
- 索引器可以被重载,属性不可以
- 索引器不能声明为static,属性可以