目录
使用基类的引用
派生类的实例由基类的实例加上派生类新增的成员组成。 派生类的引用指向整个类对象,包括基类部分。
如果有一个派生类对象, 就可以获取派生类对象的基类部分的引用。
下面的代码示例 使用派生类对象的基类部分的引用来访问对象。
namespace HelloWorld_Console
{
class SomeClass
{// 当基类中的字段是私有的,那么在派生类中定义同名字段, 该字段不需要添new,如果是其它的访问修饰符就需要添加new
// 以上规则对基类中的成员函数都一样
int m_Field = 0;
public void Print()
{
WriteLine("调用的是基类中的Print函数!");
}
public SomeClass()
{
WriteLine("调用的是基类中构造函数!");
}
public void Show()
{
WriteLine($"输出基类的m_Field的值:{m_Field}");
}
}
class OtherClass : SomeClass
{
new public void Print()
{
WriteLine("调用的是派生类的Print函数!");
}
public OtherClass()
{
WriteLine("调用的是派生类中构造函数!");
}
new public void Show()
{
WriteLine($"输出派生类m_Field的值:{m_Field}");
base.Show(); //派生类中调用基类中的该函数
}
int m_Field = 99;
}
class Program
{
static void Main(string[] args)
{
OtherClass myOtherClass = new OtherClass();
SomeClass mySomeClass = (SomeClass)myOtherClass; //该代码不会调用基类的构造函数
myOtherClass.Show();
mySomeClass.Print();
ReadKey();
}
}
}
输出结果为:
调用的是基类中构造函数!
调用的是派生类中构造函数!
输出派生类m_Field的值:99
输出基类的m_Field的值:0
调用的是基类中的Print函数!
当派生类中隐藏了基类中的成员, 使用基类对象引用派生类对象时, 然后用基类对象访问同名成员,访问的是基类中的同名成员。
虚方法 和覆写方法
使用虚函数可以使基类对象引用派生类对象时, 然后用基类对象访问同名成员,访问的是派生类中的同名成员。
可以使用基类引用调用派生类的方法,只需要满足下面的条件:
- 派生类中的方法和基类的方法有相同的签名和返回类型。
- 基类的方法使用virtual标识。
- 派生类的方法使用override 标识。
namespace HelloWorld_Console
{
class SomeClass
{// 当基类中的字段是私有的,那么在派生类中定义同名字段, 该字段不需要添new,如果是其它的访问修饰符就需要添加new
// 以上规则对基类中的成员函数都一样
int m_Field = 0;
public SomeClass()
{
WriteLine("调用的是基类中构造函数!");
}
virtual public void Print()
{
WriteLine("调用的是基类中的Print函数!");
}
virtual public void Show()
{
WriteLine($"输出基类的m_Field的值:{m_Field}");
}
}
class