我一直陷入困境,这是一个现有的代码交给我,
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'
答案 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关键字。
要在基类中调用实现,您必须将实例类型化为基类的类型。