C# 在.NET类中密封抽象类或接口

C# 在.NET类中密封抽象类或接口,c#,.net,C#,.net,在Scala中,可以定义一个密封的基类或特征(接口),以便只允许扩展该类的类必须放在同一个类中 在编写库时,这是一种有用的模式。在.NET中是否有任何等效模式?唯一的模拟方法是在抽象类中使用私有构造函数,并以嵌套类的形式提供实现 范例 public abstract class Foo { private Foo(int k) {} public class Bar : Foo { public Bar() : base(10) {} } } +1.或者标记抽象类的

在Scala中,可以定义一个密封的基类或特征(接口),以便只允许扩展该类的类必须放在同一个类中


在编写库时,这是一种有用的模式。在.NET中是否有任何等效模式?

唯一的模拟方法是在抽象类中使用私有构造函数,并以嵌套类的形式提供实现

范例

public abstract class Foo
{
  private Foo(int k) {}

  public class Bar : Foo
  {
     public Bar() : base(10) {}
  }
}

+1.或者标记抽象类的构造函数
internal
是类的另一个类似选项。我看不出有什么好处,你能帮我吗?(我知道您想要什么,但我不知道为什么)使用这种模式,您实际上可以实现“复杂”的枚举,这非常有用。您可以保证抽象类只有一定数量的实现。NET支持“生活在同一个程序集中”的方法。隐含的假设是,无论谁知道如何将他们的代码放入您的程序集中,您都很熟悉,而且离您的程序集只有几格之遥。JVM中没有等效的内部可访问性。@jnovacho这个概念被称为(或至少与)标记的并集或和类型。这在“函数式”API中非常常见。