抽象方法就是 [访问修饰符] abstract 返回类型 方法名();
抽象成员(只能是公共的,方法,索引,属性等等)只能定义在接口或者抽象类中。抽象方法没有方法体的实现,主要是为了继承重写。
虚方法就是 [访问修饰符] virtual 返回类型 方法名() {//方法的实现代码}
虚方法跟正常方法一样,只不过允许派生类重写,重写后派生类对象(不管是否是父类型)一般访问不到虚方法了,需要特殊方法访问。
如果没重写子类对父类的成员还可以隐藏(就是签名一摸一样),还可以构成重写(就是方法名一样,签名不同)。
接口跟抽象类有点类似,都为了实现多态,接口注重对功能(即方法,时间,索引,属性等的抽象),抽象类对整个对象的抽象,另接口支持多继承。
[访问修饰符] interface 接口名
上例子- class A
- {
- public string str = "A";
- public void Show()
- { Console.WriteLine("Show A"); }
- }
- class B:A
- {
- public string str = "B";
- public virtual void Show()
- { Console.WriteLine("Show B"); }
- }
- abstract class C:B
- {
- public abstract void Show();//这叫隐藏
- //public override void Show()//这叫重写
- //{ Console.WriteLine("Show C"); }//抽象类可以继承类或接口,可以重写虚方法也可以不重写,但是抽象成员如果继承了则必须被重写
- }
- class D:C
- {
- public string str = "D";
- public override void Show()//必须重写抽象成员,虚方法就可以不重写
- { Console.WriteLine("Show D"); }
- }
- class MyClass
- {
- static void Main(string[] args)
- {
- D d = new D();
- C c = d;
- B b = d;
- A a = d;
- Console.WriteLine(d.str);//D
- Console.WriteLine(c.str);//B
- Console.WriteLine(b.str);//B
- Console.WriteLine(a.str);//A
- Console.WriteLine();
-
- d.Show();//D
- c.Show();//C
- b.Show();//C
- a.Show();//A
- Console.ReadKey();
- }
复制代码 |