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

multilevel inheritance with same method names c#

一直卡在这边,是交给我的现有代码,

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
     }
    }
}

场景是这样的,在特定条件下它应该 return 来自 class A 的方法,否则它应该 return 来自 class B 的方法 我该如何实现这一目标,因为输出始终是 'B'

你可以这样做

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
      }
    }
}

如果您实现的方法隐藏了基类中的方法 class,编译器会警告您。要告诉您的编译器这是有意的,请使用 New 关键字。

要在基础 class 中调用实现,您必须将实例类型转换为基础的类型class。

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

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