类继承
通过类继承我们可以定义一个新的类,新类纳入一个已经声明的类进行扩展。
已经存在的类称为基类,新类被称为派生类。
格式: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")
{
...
}
注意:一个类有好几个构造函数,并且他们都需要在对象构造过程开始时,执行一些公共的代码。对于这种情况,可以把公共代码提出来作为一个构造函数,被其他所有的构造函数作为构造函数初始化语句使用,从而减少了代码的重复。