虚方法可以使基类的引用访问"升至"派生类中
可以使用基类引用调用派生类的方法,只需满足下面的条件
class Program { static void Main(string[] args) { MyDerivedClass derived = new MyDerivedClass(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); } } class MyBaseClass //基类 { virtual public void Print() { Console.WriteLine("基类"); } } class MyDerivedClass : MyBaseClass //派生类 { public override void Print() { Console.WriteLine("派生类"); } }
上面代码阐明了virtual和override方法。
关于virtual和override的信息如下
class MyBaseClass //基类 { virtual public void Print() { Console.WriteLine("基类"); } } class MyDerivedClass : MyBaseClass //派生类 { public override void Print() { Console.WriteLine("派生类"); } } class SecondDerived : MyDerivedClass//最高派生类 { //to }
如果把SecondDerived的Print方法声明为override,那么他会覆写方法的全部两个派生级别的版本
class SecondDerived : MyDerivedClass//最高派生类 { public override void Print() { Console.WriteLine("第二派生类"); } } static void Main(string[] args) { SecondDerived derived = new SecondDerived(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); }
class SecondDerived : MyDerivedClass//最高派生类 { new public void Print() { Console.WriteLine("第二派生类"); } } static void Main(string[] args) { SecondDerived derived = new SecondDerived(); MyBaseClass mybc = (MyBaseClass)derived; derived.Print(); mybc.Print(); Console.ReadLine(); }
class MyBaseClass //基类 { //virtual public void Print() //{ // Console.WriteLine("基类"); //} private int _myInt = 5; virtual public int Myproerty { get { return _myInt; } } } class MyDerivedClass : MyBaseClass //派生类 { //public override void Print() //{ // Console.WriteLine("派生类"); //} private int _myInt = 10; public override int Myproerty { get { return _myInt; } } } static void Main(string[] args) { MyDerivedClass derived = new MyDerivedClass(); MyBaseClass mybc = (MyBaseClass)derived; Console.WriteLine(derived.Myproerty); Console.WriteLine(mybc.Myproerty); Console.ReadLine(); }
要创建对象的基类部分,需要隐试调用基类的某个构造函数作为创建实例过程的一部分
继承层次链中的每个类在执行自己的构造函数体之前执行他的基类构造函数
class MyBaseClass //基类 { public MyBaseClass()//2 基类构造函数调用 { } } class MyDerivedClass : MyBaseClass //派生类 { int _myInt = 10; //1 成员初始化 public MyDerivedClass() //3 构造函数体执行 { } }
有两种形式的构造函数初始化语句
抽象成员是指被设计为被覆写的函数成员
抽象成员的特征
抽象成员只可以在抽象类中声明,一共有4种类型的成员可以声明为抽象的
抽象成员的其他注意事项
抽象类是指设计为被继承的类,抽象类只能被用作其他类的基类
abstract class AbClass //抽象类 { public void A() //普通方法 { Console.WriteLine("我是抽象类"); } abstract public void B(); //抽象方法 } class MyDerivedClass : AbClass //派生类 { public override void B() { Console.WriteLine("我是派生类"); } } static void Main(string[] args) { MyDerivedClass derived = new MyDerivedClass(); derived.A(); derived.B(); Console.ReadLine(); }
密封类只能被用作独立的类,它不能被用作基类
密封类使用sealed修饰符标注
静态类中所有的成员都是静态的。静态类用于存放不受实例数据影响的数据和函数。
扩展方法的重要要求如下
原文:http://www.cnblogs.com/Nomads/p/4842925.html