我有一个关于在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
设置为“这是家长”?我可能误解C#中的方法重载。有没有办法强制代码使用Child调用(将str1设置为“That's a Child”)?
仅供参考:http://stackoverflow.com/questions/13095544/overloaded-method-why-is-base-class-given-precedence – BradleyDotNET 2014-09-03 20:55:31