【发布时间】:2020-10-01 11:18:10
【问题描述】:
namespace Test
{
public class Basic
{
public virtual void WriteIt()
{
Console.WriteLine("Hi");
}
}
public class Not_So_Basic : Basic
{
public override void WriteIt()
{
Console.WriteLine("Hi2");
}
}
class Program
{
static void Main(string[] args)
{
Not_So_Basic obj = new Basic() as Not_So_Basic;
if(obj==null)
Console.WriteLine("Error");
else
obj.WriteIt();
}
}
}
所以基本上我创建了这两个类,Basic 和 Not_So_Basic,它们是 Basic 类的子类。
当我尝试通过向下转换使用其父类的对象来创建 Not_So_Basic 类的对象时,我总是得到一个空对象。
我理解这样做,我只是将我的子类对象引用到父类对象,我得到了“子类视图”,对吧?我并没有真正在基于父类的子类的堆中创建一个单独的空间。
我是编程新手,所以请温柔一点,不要烤我。我确信有一条规则我正在打破。 顺便说一句,我正在努力学习编程,我不是在做一个项目,只是想把我的脑袋绕在一个我正在打破的规则上。
代码是用c#编写的。
【问题讨论】:
-
因为它不是真正的
Not_So-Basic对象。as运算符就是不能那样工作的。从逻辑的角度来看,不能将基类型视为派生类型是有道理的。