考虑以下类:

public abstract class Planet
{
    protected abstract Material Composition { get; }
}

public abstract class TerrestrialPlanet : Planet
{
    protected override Material Composition
    {
        get
        {
            return Type.Rocky;
        }
    }
}
public abstract class GasGiant : Planet
{
    protected override Material Composition
    {
        get
        {
            return Type.Gaseous;
        }
    }
}

有没有办法防止非抽象对象直接从类 Planet 继承?

换句话说,我们可以强制任何直接从 Planet 继承的类是抽象的吗?
// ok, because it doesn't directly inherit from Planet
public class Earth : TerrestrialPlanet { ... }

// ok, because it is abstract
public abstract class IcyPlanet : Planet { ... }

// we want to prevent this
public class Pluto : Planet { ... }

最佳答案

不,您不能阻止非抽象类继承您创建的给定公共(public)类。

如果从基派生的所有类都在同一个程序集中,而没有任何具体类,则可以创建基类 internal ,以避免将其暴露在外部,这将阻止其他程序集直接扩展它。如果它需要公开公开,或者具体实现将在同一个程序集中,那么这当然不是一个选择。

关于c# - 我可以防止类被非抽象对象继承吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34321569/

10-10 12:32