假设我有带有公共方法 A 和 B 的 BaseClass,并通过继承创建 DerivedClass。
e.g.
public DerivedClass : BaseClass {}
现在我想在 DerivedClass 中开发一个使用 A 和 B 的方法 C。有没有一种方法可以将方法 A 和 B 重写为 DerivedClass 中的私有方法,以便只有方法 C 暴露给想要使用我的 DerivedClass 的人?
这是不可能的,为什么呢?
在 C# 中,如果继承公共方法,则必须将它们设为公共。否则,他们首先希望您不要从该类中派生。
您必须使用 has-a 关系,而不是使用 is-a 关系。
语言设计者故意不允许这样做,以便您可以更正确地使用继承。
例如,人们可能会不小心混淆了 Car 类,使其派生自 Engine 类以获取其功能。但引擎是汽车使用的功能。所以你会想使用 has-a 关系。汽车的用户不想访问引擎的界面。汽车本身不应该将引擎的方法与它自己的方法混淆。也不是Car的未来衍生品。
所以他们不允许它保护你免受不良继承层次结构的影响。
你应该做什么?
相反,您应该实现接口。这使您可以自由地使用 has-a 关系来使用功能。
其他语言:
在 C++ 中,您只需在 private、public 或 protected 基类之前指定一个修饰符即可。这使得该库的所有成员对该指定的访问级别都是公开的。在我看来,你不能在 C# 中做同样的事情,这似乎很愚蠢。
重组后的代码:
interface I
{
void C();
}
class BaseClass
{
public void A() { MessageBox.Show("A"); }
public void B() { MessageBox.Show("B"); }
}
class Derived : I
{
public void C()
{
b.A();
b.B();
}
private BaseClass b;
}
我知道上述类的名称有点没有意义:)
其他建议:
其他人建议将 A() 和 B() 公开并抛出异常。但这并没有成为一个可供人们使用的友好类,也没有真正的意义。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)