我有一个关于C#中方法重载的问题。我有一个父类和一个子类。
class Parent
{
public virtual string GetMyClassName()
{
return "I'm a Parent";
}
}
class Child : Parent
{
public override string GetMyClassName()
{
return "I'm a Child";
}
}
我有两个静态方法声明在这两个类之外,可以作用于任意类型的对象:
static string MyClassName(Parent parent)
{
return "That's a Parent";
}
static string MyClassName(Child child)
{
return "That's a Child";
}
当我测试这些方法如何被调用时,我得到了一个我认为很奇怪的结果:
Parent p = new Child();
var str1 = MyClassName(p); // = "That's a Parent"
var str2 = p.GetMyClassName(); // = "I'm a Child"
为什么str1
被设置为"That's a Parent"?我可能误解了C#中的方法重载。有没有一种方法可以强制代码使用Child调用(将str1设置为"That's a Child")?