防止子A覆盖方法1,但不覆盖子B

本文关键字:覆盖 盖子 方法 | 更新日期: 2023-09-27 18:12:20

A类是超类,B类和C类继承A类,A类有方法

public virtual GetName() {}

我希望B不能重写这个方法,但是C可以。

我该怎么做?

PS:我接受了面试,他们说他们可以做,但是他们没有告诉我怎么做。

防止子A覆盖方法1,但不覆盖子B

正如所写的,面试问题是错误的:你不能(通过简单的,非反思的方式,至少)允许C覆盖它,而不允许B覆盖它。

如果CA在同一个集合中,而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可以",因为它不知道它们的存在。

也许你误解了这个问题?