【发布时间】:2011-01-22 16:06:53
【问题描述】:
我有一些这样的课程
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
A a = new C();
a.method();
Console.ReadLine();
}
}
public class A
{
public virtual void method()
{
Console.WriteLine("METHOD FROM A");
}
}
public class B : A { }
public class C : B
{
public override void method()
{
Console.WriteLine("METHOD FROM C");
}
}
}
它工作正常,打印“METHOD FROM C”
但是
如果我有这样的情况
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
A a = new C();
a.method();
Console.ReadLine();
}
}
public class A
{
public void method()
{
Console.WriteLine("METHOD FROM A");
}
}
public class B : A { }
public class C : B
{
public new void method()
{
Console.WriteLine("METHOD FROM C");
}
}
}
它打印“来自 A 的方法”。如何在不采用强制转换或更改方法声明的情况下获得与第一个示例相同的行为?
【问题讨论】:
标签: c# methods new-operator invoke base-class