Nik*_*ita 4 c# inheritance reference base-class
class Base
{
//...
public int i = 5;
}
class Drifted : Base
{
//...
public int b = 10;
}
Base ObjectOrReference = new Drifted();
Run Code Online (Sandbox Code Playgroud)
所以Base ObjectOrReference;是对基类型的引用.当我们写Base ObjectOrReference = new Drifted();它成为对象因为使用'new'我们为它分配内存?或者它仍然引用,如果它是真的,它有什么类型?直接的问题是:"是ObjectOrReference对象吗?"
Ada*_*rth 12
它仍然是一个引用,指向堆上对象的指针.它是类型Drifted.
即使您的引用属于Base类型,底层对象也是如此,即使您尝试使用,也将使用Drifted派生类中的任何重写成员Drifted而不是其他成员.BaseBase
在使用new语法隐藏成员的情况下,如果您有对基类型的引用,它将绕过隐藏成员的任何派生类.
可以使用Google搜索"C#参考类型"在线查看概述.我浏览了这个,看起来值得一读:
http://www.albahari.com/valuevsreftypes.aspx
Base ObjectOrReference = new Drifted();
Run Code Online (Sandbox Code Playgroud)
有了它,你已经创建了一个Drifted实例,但是被Base引用变量引用ObjectOrReference.现在它的功能仅限于可用的功能Base.如果你想,说,访问int b中Drifted,你必须将它转换为Drifted
是的,ObjectOrReference是一个对象和一个有效的对象.
它是DriftedType的一个对象.这是面向对象编程的一个基本概念,基类的指针/引用(ObjectOrReference在你的情况下)可以保存/引用它的派生类的对象(Drifted在你的情况下),这就是为什么它不是一个错误和一个有效的Drifted类型对象