C#中的父类与子类的继承关系与C和C++中的类似,这里先阐述最重要的一点:假如子类继承了父类,那么子类可以强制转换为父类,并且保证编译和运行都不出错;但是父类强制转换成子类的时候,编译可以通过运行通不过。
所以子类只能强制转化成父类,而父类不能直接转化成子类。
static void Main(string[] args)
{
//编译和运行都能通过
ClassB b = new ClassB();
ClassA a = (ClassA)b;
//编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
}
class ClassB : ClassA
{
}
但是父类可以由子类强转得到强制转换为另外子类
static void Main(string[] args)
{
//先将子类强制转换为父类,然后用此父类强制转换为另外一个子类(通过)
ClassB b = new ClassB();
ClassA a = (ClassA)b;
ClassB bbbbb = (ClassB)a;
//(将父类直接强制转换为子类)编译能通过,运行通不过
ClassA aa = new ClassA();
ClassB bb = (ClassB)aa;
}
class ClassA
{
}
class ClassB : ClassA
{
}
无论是子类转化成父类还是父类由转成另外的子类,对象是根据声明的类型(子类或父类)去调用其变量和函数的,与赋值无关。