具有相同方法名称的多级继承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
中的解决方案仍然相同。
一直卡在这边,是交给我的现有代码,
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
中的解决方案仍然相同。