C#中子类和父类的对象之间能够互相转换吗?
发布:智码IT网 阅读:
现有父类Person和派生类ChinaPerson,定义如下:
class Person
{
public string Name { get; set; }
public string Say()
{
return "我的名字的是:" + Name;
}
}
class ChinaPerson : Person
{
public string SayChiess()
{
return "我的名字是:" + Name + ",我来自中国";
}
}
分别申明父类Person的实例p和子类ChinaPerson的实例cPer,那么父类的实例强制类型转换为子类和子类的实例强制转换为父类,会出错吗?
实验代码如下:
//1、子类强制转换为父类
ChinaPerson cPer = new ChinaPerson();
cPer.Name = "张三";
var s = (cPer as Person).Say();
运行结果:顺利运行,并输出预期结果
//2、父类强制转换为子类
Person p = new Person();
p.Name = "李四";
var s2 = (p as ChinaPerson).Say();
运行结果:编译能通过,运行时出错,错误信息如下:
System.NullReferenceException:“未将对象引用设置到对象的实例。” (... as SqlSugarTest.ChinaPerson) 返回 null。
实验结论:
子类型可以强制类型转换为父类型,反之则不可以。