Tim*_*oyd 140
这是一个类:
internal:只能从定义的程序集(或朋友程序集)中访问.sealed:不能继承.将类标记为internal阻止程序集的外部用户使用它们的方法.它实际上是一种设计封装形式,恕我直言,标记不属于预期的公共API \对象模型的类型是一种很好的做法internal.从长远来看,这可以防止库的用户将自己耦合到您不想要的类型.这种无意识的耦合会损害您更改和改进库实现方式的能力,因为您无法在不破坏客户端的情况下更改它们.使用internal有助于将库的公共和可用表面区域保持在预期的范围内.
将类标记为sealed阻止继承这些类.这是一个相当激烈的设计意图,如果一个类已经如此专业化以至于通过继承直接或通过覆盖其行为而不应该向其添加其他功能是明智的,这有时是有用的.
internal并sealed以完全不同的方式修改类型,但它们可以一起使用.
注意您可以进一步确定范围,internal因为您可以将一组其他程序集定义为"朋友".这些朋友程序集可以访问您的internal类型.这对于定义协作组件集(例如生产和测试组件)非常有用.通常希望测试组件可以看到它正在测试的组件中的所有类型.
HyL*_*ian 16
internal:只能在同一个程序集中访问的类.
Assembly1.dll:
namespace test {
internal class InternalClass {
}
public class PublicClass {
}
}
Run Code Online (Sandbox Code Playgroud)
Assembly2.dll:
using test;
...
InternalClass c1; // Error
PublicClass c2; // OK
Run Code Online (Sandbox Code Playgroud)密封:不能衍生出来的一类
sealed class SealedClass { ... }
class ChildClass : SealedClass {} //ERROR
Run Code Online (Sandbox Code Playgroud)HAB*_*JAN 11
内部表示该成员可供同一程序集中定义的其他类型访问.密封类是抽象的对立面.它可以实例化,但不能作为基类.密封课程的主要原因是防止用户摆弄它并打破它.密封类也允许某些编译器优化,而非密封类是不可能的.