考虑以下课程:
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 { ... }
答案 0 :(得分:5)
不,您无法阻止非抽象类继承您创建的给定公共类。
如果派生自基类的所有类都在同一个程序集中,并且没有具体的类,那么你可以创建基类internal
,以避免在外部暴露它 / em>,这会阻止其他程序集直接扩展它。如果它需要公开展示,或者具体的实现将在同一个程序集中,那么这当然不是一种选择。