具有相同方法名称的多级继承c#

时间:2015-01-22 07:57:33

标签: c# asp.net .net inheritance

我一直陷入困境,这是一个现有的代码交给我,

class A
{
    public string helloworld()
    {
        return "A";
    }
}

class B : A
{
    public string helloworld()
    {

        return "B";
    }
}

class C: B
{
    public string hi()
    {
    if(condition1)
     {
        return helloworld(); // From class A
     }
    else
     {
        return helloworld(); // From class B
     }
    }
}

场景是这样的,在某种情况下它应该从A类返回方法,否则它应该从B类返回方法 我如何实现这一点,因为输出总是'B'

2 个答案:

答案 0 :(得分:6)

if (condition1)
{
    return ((A)this).helloworld(); // From class A
}
else
{
    return ((B)this).helloworld(); // From class B
}

此外,如果B的来源在您的控制之下,您应该将new关键字添加到其helloworld的实现中(或者更好的是,将其重命名以避免隐藏),但是C.hi中的解决方案仍然是相同的。

答案 1 :(得分:4)

你可以这样做

class A
{
    public string helloworld()
    {
        return "A";
    }
}

class B : A
{
    public new string helloworld()
    {
        return "B";
    }
}

class C: B
{
   public string hi(bool condition)
   {
      if(condition)
      {
         A instance = this;
         return instance.helloworld(); // From class A
      }
      else
      {
          B instance = this;
          return instance.helloworld(); // From class B
      }
    }
}

如果实现了一个隐藏基类中方法的方法,编译器会向您发出警告。要告诉编译器,请使用New关键字。

要在基类中调用实现,您必须将实例类型化为基类的类型。