类继承
通过类继承我们可以定义一个新的类,新类纳入一个已经声明的类进行扩展。
已经存在的类称为基类,新类被称为派生类。
格式:class 派生类:基类
访问继承的成员
继承的成员可以被访问,无论他们是在基类中声明还是子派生类中声明。
class SomeClass { public string f1="base class"; public void Method1(string s) { Console.WriteLine("base-:{0}",s); } } class OtherClass:SomeClass { public string f2="derived class"; public void Method2(string s) { Console.WriteLine("derived-{0}",s); } } class Program { static void Main() { OtherClass a=new OtherClass(); a.Method1(a.f1); a.Method2(a.f2); a.Method1(a.f1); a.Method2(a.f2); } }
以上输出结果:base-base class
base-derived class
derived-base class
derived-derived class
所有类都派生自object类
1.类object是唯一的非派生类,没有基类规格说明的类隐式地直接派生自类object.
2.类只能直接继承一个类,但继承的层次没有限制。
屏蔽基类的成员
1.要屏蔽一个继承的数据成员,需要声明一个新的相同类型的成员。
2.通过在派生类中声明新的带有相同签名的函数成员。
格式:使用new 关键字
class MyClass { public string f1; ... } class MyOther:MyClass { new public string f1; ... }
基类访问
派生类想要访问被隐藏的继承成员,使用base关键字。
base.f1;
使用基类的引用
如果有一个派生类的引用,就可以获取该对象基类部分的引用(使用类型转换运算符把该引用转换为基类类型)。
class A { ... } class B:A { ... } class Program { static void Main() { B b=new B(); A a=(A)b;//转换成基类 ... } }
虚方法和覆写方法:
1.基类中用virtual,派生类中用override。
2.派生类中用new。
(之前有一篇写过了)
构造函数的执行
1.构造函数初始化语句
public MyClass(int x,string s):base(x,s) { }
public MyClass(int x):this(x,"yyy") { ... }一个类有好几个构造函数,并且他们都需要在对象构造过程开始时,执行一些公共的代码。对于这种情况,可以把公共代码提出来作为一个构造函数,被其他所有的构造函数作为构造函数初始化语句使用,从而减少了代码的重复。