C# new 在派生 class-继承上没有按预期工作
C# new not working as expected on derived class-inheritence
给出下面的代码。我想知道为什么我的输出不是 B A B,而是 B A A
class A
{
public virtual void display()
{
Console.WriteLine("A");
}
}
class B : A
{
public new void display()
{
Console.WriteLine(" B ");
}
}
class Program
{
static void Main(string[] args)
{
A obj1 = new B();
B obj2 = new B();
obj2.display();
A r;
r = obj1;
r.display();
r = obj2;
r.display();
Console.ReadLine();
}
}
//Output:
B
A
A
由于 r 现在是对 class B(obj2) 的引用,它应该输出 B,但它输出的是 A。
那不是 new
的工作方式。 是override
的工作原理。
new
(方法隐藏)仅在您的变量类型(注意实际类型无关紧要)为派生类型。你的第二个测试只是多态性,为此你需要 override
。
class B : A
{
public override void display()
{
Console.WriteLine(" B ");
}
}
Side-note, you almost never need method hiding.
给出下面的代码。我想知道为什么我的输出不是 B A B,而是 B A A
class A
{
public virtual void display()
{
Console.WriteLine("A");
}
}
class B : A
{
public new void display()
{
Console.WriteLine(" B ");
}
}
class Program
{
static void Main(string[] args)
{
A obj1 = new B();
B obj2 = new B();
obj2.display();
A r;
r = obj1;
r.display();
r = obj2;
r.display();
Console.ReadLine();
}
}
//Output:
B
A
A
由于 r 现在是对 class B(obj2) 的引用,它应该输出 B,但它输出的是 A。
那不是 new
的工作方式。 是override
的工作原理。
new
(方法隐藏)仅在您的变量类型(注意实际类型无关紧要)为派生类型。你的第二个测试只是多态性,为此你需要 override
。
class B : A
{
public override void display()
{
Console.WriteLine(" B ");
}
}
Side-note, you almost never need method hiding.