【发布时间】:2018-04-08 12:43:34
【问题描述】:
当我写 a=c; 时,我只是想了解正在发生的事情;当我检查“a”的类型时,它显示为“C”类。现在我的问题是,如果“a”指向“c”,那么为什么它的行为不像指针“c”。 p>
class Program
{
static void Main(string[] args)
{
C c = new C();
A a = new A();
Console.WriteLine(a.GetType());
a = c;
Console.WriteLine(a.GetType());
a.Show();
c.Show();
Console.ReadLine();
}
}
class A
{
public virtual void Show()
{
Console.WriteLine("A.Show()");
}
}
class B : A
{
public override void Show()
{
Console.WriteLine("B.Show()");
}
}
class C : B
{
public new void Show()
{
Console.WriteLine("C.Show()");
}
}
输出:
【问题讨论】:
-
"为什么它的行为不像指针 "c"。"这是什么意思?
-
我的意思是,为什么它调用B类的“Show()”。
-
您使用了
new关键字来禁止编译器警告。粗略地说“您确定要这样做,这可能是错误的”。原来你不确定。将 C.Show 的名称更改为 ShowAlso(),您不再需要 new 关键字。当你完全运行程序时会发生什么。
标签: c# oop inheritance