这是我的情况.在Java中,我可以在base/super类中将方法标记为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
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:不重复.
所有答案似乎都暗示,不可能阻止方法在派生类中隐藏/隐藏.在将一些旧的Java代码迁移到C#时,这一点变得很明显.Java中的最终方法不允许任何人在任何派生类中使用相同的方法签名.虽然在大多数场景中C#允许在派生类中使用相同签名的方法,但如果有必要,可以防止这种行为.
Ree*_*sey 10
//如何防止以下情况
没有办法阻止这种情况.这是语言所允许的.
请注意,在实践中,这很少重要.如果您希望将基类用作类,则仍将调用您的方法.new当使用DerivedClassfrom aa声明为的变量时,仅使用隐藏方法DerivedClass.
这意味着,如果构建的API,您的API MyClass将始终MyMethod在实例传递到您的方法时调用.
编辑以回应评论:
如果你担心人们通常会对你的课程进行小类化,那么你唯一真正的选择就是密封你的课程:
public sealed class MyClass
{
Run Code Online (Sandbox Code Playgroud)
这将阻止人们完全创建子类.但是,如果您希望允许人们从您的班级派生,则无法阻止他们将您的方法隐藏在他们的班级中.