什么是C#中的内部密封类?

我正在通过一些C#代码来扩展VS2010中的语言支持(Ook示例)。 我看到一些叫做internal sealed class

这些做什么? 会有人使用它们吗?

谢谢

这是一个类:

  • internal :只能从定义的程序集(或朋友程序集)中访问。
  • sealed :不能被inheritance。

将课程标记为internal是防止程序集的外部用户使用它们的一种方法。 这实际上是一种devise封装和恕我直言,这是一种很好的做法,将不属于公共API \对象模型的一部分的types标记为internal 。 从长远来看,这可以防止你的图书馆的用户将自己与你不想要的types联系起来。 这种意外的耦合损害了你的能力,改变和发展你的图书馆的实施方式,因为你不能改变它们,而不会打破你的客户。 使用internal有助于保持图书馆的公共和可用表面面积达到预期的水平。

将类标记为sealed可防止这些类被inheritance。 这是一个非常激烈的devise意图,如果一个类已经是非常专业化的,那么有时候这个devise意图是非常有用的,通过直接的inheritance或者通过覆盖它的行为来增加其他的function是不明智的。

internalsealed修改types有很大不同,但可以一起使用。

注意你可以进一步确定internal范围控制,因为你可以定义一组其他程序集作为“朋友”。 这些朋友程序集可能访问您的internaltypes。 这对于定义诸如生产和testing组件的协作组件集合可能是有用的。 testing组件可以看到正在testing的组件中的所有types。

  • internal(内部):只能在同一个程序集内访问的类。

    Assembly1.dll:

     namespace test { internal class InternalClass { } public class PublicClass { } } 

    Assembly2.dll:

     using test; ... InternalClass c1; // Error PublicClass c2; // OK 
  • 密封:一个不能派生出来的类

     sealed class SealedClass { ... } class ChildClass : SealedClass {} //ERROR 

内部意味着该成员可以在同一个程序集中定义的其他types访问。 一个封闭的类是抽象的对立面。 它可以被实例化,但不能作为基类。 封闭类的主要原因是为了防止用户摆弄它并破坏它。 密封类也允许某些编译器优化,而非密封类是不可能的。

internal sealed类是这样一个:

internal – 只能在同一个程序集内进行访问
sealed – 不能被分类

换句话说,你没有办法直接使用它。

内部意味着它只能用在同一个组件中,

internal关键字是types和types成员的访问修饰符。 内部types或成员只能在同一个程序集的文件中访问

密封不能inheritance

密封的类不能被inheritance。 使用密封类作为基类是错误的。 在类声明中使用sealed修饰符来防止类的inheritance。