我的问题属于这种情况
class A
{
public virtual void show()
{
Console.WriteLine("Hey! This is from A;");
}
}
class B:A
{
public sealed override void show()
{
Console.WriteLine("Hey! This is from B;");
}
}
class C:B
{
public new void show()
{
Console.WriteLine("Hey! This is from C;");
}
}
class A
{
public void show()
{
Console.WriteLine("Hey! This is from A;");
}
}
class B:A
{
public new void show()
{
Console.WriteLine("Hey! This is from B;");
}
}
在上面的代码中,C类隐藏了B类的Method Show()
Q值。我如何确定没有子类覆盖以及隐藏方法 已在SuperClass中定义
类似这样或可能类似readonly
关键字用于字段
class A1
{
public sealed void show() // I know it will give compilation error
{
Console.WriteLine("Hey! This is from A1");
}
}
class B1 : A1
{
public void show()
{
Console.WriteLine("You must get a compilation Error if you create method with this name and parameter");
}
}
修改1:
是的,我想阻止扩展程序确保它使用权限 如果有其他人,请使用方法名称和参数coz实现 查看代码应该是正确的
答案 0 :(得分:13)
防止存在隐藏方法的子类的唯一方法是创建类sealed
,从而阻止任何子类。如果可以有任何子类,那么他们可以隐藏方法,你无能为力。
答案 1 :(得分:0)
如果您依赖A
和B
没有覆盖他们的方法,sealed
就可以胜任。如果您希望阻止方法隐藏,请确保所有需要A
或继承者的成员定义为A
或B
。
请考虑以下事项:
A a = new A();
a.show(); // "Hey! This is from A;"
A a = new B();
a.show(); // "Hey! This is from B;"
B b = new B();
b.show(); // "Hey! This is from B;"
A a = new C();
a.show(); // "Hey! This is from B;"
B b = new C();
b.show(); // "Hey! This is from B;"
只有当您将C
称为C
时才会启用new
关键字。
C c = new C();
c.show(); // "Hey! This is from C;"
总之,您的实现应仅使用A
和B
的实例定义A
或B
。实际上,除非在程序集中实现C
之类的内容,否则不能强制您的代码调用C
的{{1}}。