防止子A覆盖方法1,但不覆盖子B
本文关键字:覆盖 盖子 方法 | 更新日期: 2023-09-27 18:12:20
A类是超类,B类和C类继承A类,A类有方法
public virtual GetName() {}
我希望B不能重写这个方法,但是C可以。
我该怎么做?
PS:我接受了面试,他们说他们可以做,但是他们没有告诉我怎么做。正如所写的,面试问题是错误的:你不能(通过简单的,非反思的方式,至少)允许C
覆盖它,而不允许B
覆盖它。
如果C
和A
在同一个集合中,而B
在一个单独的集合中,您可以使用internal
方法创建这些规则:
public class A
{
public string GetName()
{
return GetNameInternal();
}
internal virtual string GetNameInternal()
{
return "A";
}
}
public class C : A
{
internal override string GetNameInternal()
{
return "C";
}
}
// in other assembly
public class B : A
{
// invalid due to scope:
//internal override string GetNameInternal() { ... }
}
在这种情况下是不可能的。多态性(类继承)意味着超类不知道谁继承了它自己,所以你的超类不能说"ClassB
不能覆盖这个方法,但ClassC
可以",因为它不知道它们的存在。