【发布时间】:2013-08-09 09:40:13
【问题描述】:
这是我的情况。在 Java 中,我可以在基类/超类中将方法标记为 final,派生类无法屏蔽具有相同签名的方法。然而,在 C# 中,new 关键字允许继承我的类的人创建具有相同签名的方法。
请参阅下面的示例。我需要保持 orignal.MyClass 公开,所以请不要建议作为答案。这似乎是从 Java 迁移到 C# 时丢失的特性
public class orignal.MyClass{
public void MyMethod()
{
// Do something
}
}
class fake.MyClass: orignal.MyClass {
// How to prevent the following
public new void MyMethod()
{
// Do something different
}
}
编辑:不是重复的。
所有答案似乎都表明,不可能防止方法在派生类中被隐藏/隐藏。在将一些旧的 Java 代码迁移到 C# 时,这一点变得很明显。 Java 中的 final 方法不允许任何人在任何派生类中使用相同的方法签名。虽然在大多数情况下 C# 允许在派生类中使用相同签名的方法是很好的,但如果有必要,防止这种行为也是很好的。
【问题讨论】:
-
@Reed 提到,
it rarely matters。您的代码仍将调用原始方法。 -
不是重复的。我不是要一个等价物。我建议这个用例不存在。
标签: c# inheritance