我可以阻止一个类被非抽象对象继承吗?

时间:2015-12-16 20:32:10

标签: c# inheritance

考虑以下课程:

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 { ... }

1 个答案:

答案 0 :(得分:5)

不,您无法阻止非抽象类继承您创建的给定公共类。

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