C# c中基类对象中可用的子类属性#

C# c中基类对象中可用的子类属性#,c#,C#,这里我有下面的代码,在其中我创建了两个类A和B。 然后在main方法中,我创建了类的对象,并将子对象分配给父对象。我不明白它在c#中是如何工作的,有人能解释一下吗 class Program { static void Main(string[] args) { A objA = new A(); B objB = new B(); objA = objB; Console.ReadLine(); }

这里我有下面的代码,在其中我创建了两个类A和B。 然后在main方法中,我创建了类的对象,并将子对象分配给父对象。我不明白它在c#中是如何工作的,有人能解释一下吗

 class Program
{
    static void Main(string[] args)
    {
        A objA = new A();
        B objB = new B();
        objA = objB;


        Console.ReadLine();
    }

}

public class A
{
    public string ABC { get; set; }

    public string XYZ { get; set; }

    public string lmn { get; set; }


}

public class B : A
{
    private string vvmdn { get; set; }

    public string mkkk { get; set; }

}

参考
objA
指向内存中的
B
对象,调试器显示该对象的所有属性

您可以使用反射在运行时自己访问对象的非公共成员:。这基本上就是VisualStudio中的调试器所做的


引用的类型确实是
A
,但它在内存中指向的实际对象是A
B

它们不“可用”,只有调试器知道
objA
引用的实例的真实类型仍然是A
B
,因此能够显示这些属性,也这是通过反射完成的。您甚至可以看到,在该工具提示的第一行中,它告诉您类型
Console.Application.B
.convariance/convariance-我想您在运行时会混淆程序代码和对象。在程序代码中,objA被声明为
A
,但在运行时它是
B
的一个实例。