你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
当前回答
根据经验,有两种成员:
公共表面:从外部组件可见(公共的、受保护的和内部受保护的): 调用者不受信任,因此需要参数验证、方法文档等。 私有表面:从外部程序集(私有和内部或内部类)中不可见: 调用者通常是可信的,所以参数验证、方法文档等可以省略。
其他回答
如果您正在编写一个DLL,它将大量复杂的功能封装到一个简单的公共API中,那么“internal”将用于不公开的类成员。
隐藏复杂性(又称封装)是高质量软件工程的主要概念。
其思想是,当您设计一个库时,只有打算从外部(由库的客户端)使用的类应该是公共的。这样你就可以隐藏
可能在未来的版本中更改(如果它们是公开的,您将破坏客户端代码) 对客户是无用的,可能会造成混乱 不安全(所以使用不当会严重破坏你的库)
etc.
如果你在开发内部解决方案,那么使用内部元素就不是那么重要了,因为通常客户会经常与你联系,并且/或访问代码。不过,它们对库开发人员来说相当重要。
唯一一件事我曾经使用内部关键字是许可证检查代码在我的产品;-)
我有一个项目,使用LINQ-to-SQL的数据后端。我有两个主要的名称空间:Biz和Data。LINQ数据模型存在于数据中,并标记为“内部”;Biz命名空间拥有围绕LINQ数据类的公共类。
这就是数据。Client和business .Client;后者公开了数据对象的所有相关属性,例如:
private Data.Client _client;
public int Id { get { return _client.Id; } set { _client.Id = value; } }
Biz对象有一个私有构造函数(强制使用工厂方法)和一个内部构造函数,看起来像这样:
internal Client(Data.Client client) {
this._client = client;
}
库中的任何业务类都可以使用它,但是前端(UI)无法直接访问数据模型,从而确保业务层始终充当中介。
这是我第一次真正使用内部,它被证明是非常有用的。
当你的类或方法不完全符合面向对象范式,它们做危险的事情,需要从你控制下的其他类和方法调用,而你不想让其他人使用它们时。
public class DangerousClass {
public void SafeMethod() { }
internal void UpdateGlobalStateInSomeBizarreWay() { }
}