什么是C#中的内部密封类?
我正在通过一些C#代码来扩展VS2010中的语言支持(Ook示例)。 我看到一些叫做internal sealed class
这些做什么? 会有人使用它们吗?
谢谢
这是一个类:
-
internal
:只能从定义的程序集(或朋友程序集)中访问。 -
sealed
:不能被inheritance。
将课程标记为internal
是防止程序集的外部用户使用它们的一种方法。 这实际上是一种devise封装和恕我直言,这是一种很好的做法,将不属于公共API \对象模型的一部分的types标记为internal
。 从长远来看,这可以防止你的图书馆的用户将自己与你不想要的types联系起来。 这种意外的耦合损害了你的能力,改变和发展你的图书馆的实施方式,因为你不能改变它们,而不会打破你的客户。 使用internal
有助于保持图书馆的公共和可用表面面积达到预期的水平。
将类标记为sealed
可防止这些类被inheritance。 这是一个非常激烈的devise意图,如果一个类已经是非常专业化的,那么有时候这个devise意图是非常有用的,通过直接的inheritance或者通过覆盖它的行为来增加其他的function是不明智的。
internal
和sealed
修改types有很大不同,但可以一起使用。
注意你可以进一步确定internal
范围控制,因为你可以定义一组其他程序集作为“朋友”。 这些朋友程序集可能访问您的internal
types。 这对于定义诸如生产和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。