考虑以下类:
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/