你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
当前回答
internal关键字的一个用途是限制程序集用户对具体实现的访问。
如果您有一个工厂或其他用于构造对象的中心位置,则程序集的用户只需处理公共接口或抽象基类。
此外,内部构造函数允许您控制实例化公共类的位置和时间。
其他回答
请记住,当有人查看您的项目名称空间时,任何定义为public的类都会自动显示在智能感知中。从API的角度来看,只向项目的用户展示他们可以使用的类是很重要的。使用internal关键字隐藏他们不应该看到的东西。
如果项目A的Big_Important_Class打算在项目外部使用,那么不应该将其标记为内部。
然而,在许多项目中,经常会有一些实际上只打算在项目中使用的类。例如,您可能拥有一个类,该类保存参数化线程调用的参数。在这些情况下,您应该将它们标记为内部的,如果没有其他原因,只是为了保护自己不受意外的API更改的影响。
当您有方法、类等需要在当前程序集范围内访问,而不能在当前程序集范围外访问时。
例如,一个DAL可能有一个ORM,但对象不应该暴露给业务层,所有交互都应该通过静态方法完成,并传递所需的参数。
internal关键字的一个用途是限制程序集用户对具体实现的访问。
如果您有一个工厂或其他用于构造对象的中心位置,则程序集的用户只需处理公共接口或抽象基类。
此外,内部构造函数允许您控制实例化公共类的位置和时间。
当你的类或方法不完全符合面向对象范式,它们做危险的事情,需要从你控制下的其他类和方法调用,而你不想让其他人使用它们时。
public class DangerousClass {
public void SafeMethod() { }
internal void UpdateGlobalStateInSomeBizarreWay() { }
}
内部类使您能够限制程序集的API。这有很多好处,比如让你的API更容易理解。
此外,如果程序集中存在错误,修复程序引入破坏性更改的可能性就会降低。如果没有内部类,您将不得不假设更改任何类的公共成员都将是破坏性的更改。对于内部类,您可以假设修改它们的公共成员只会破坏程序集的内部API(以及InternalsVisibleTo属性中引用的任何程序集)。
我喜欢在类级和程序集级进行封装。有一些人不同意这一点,但很高兴知道功能是可用的。