你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
你能解释一下c#中internal关键字的实际用法吗?
我知道内部修饰符限制了对当前程序集的访问,但何时以及在何种情况下应该使用它?
当前回答
这个怎么样:通常建议不要向程序集的外部用户公开List对象,而是公开IEnumerable对象。但是在程序集中使用List对象要容易得多,因为您可以获得数组语法和所有其他List方法。因此,我通常有一个内部属性,公开要在程序集中使用的List。
欢迎对这种方法提出意见。
其他回答
使用internal的另一个原因是混淆了二进制文件。混淆器知道打乱任何内部类的类名是安全的,而公共类的名称不能打乱,因为这可能破坏现有的引用。
internal关键字的一个用途是限制程序集用户对具体实现的访问。
如果您有一个工厂或其他用于构造对象的中心位置,则程序集的用户只需处理公共接口或抽象基类。
此外,内部构造函数允许您控制实例化公共类的位置和时间。
减少噪音,你暴露的类型越少,你的库就越简单。 防篡改/安全性是另一个问题(尽管Reflection可以战胜它)。
我有一个项目,使用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)无法直接访问数据模型,从而确保业务层始终充当中介。
这是我第一次真正使用内部,它被证明是非常有用的。
这个怎么样:通常建议不要向程序集的外部用户公开List对象,而是公开IEnumerable对象。但是在程序集中使用List对象要容易得多,因为您可以获得数组语法和所有其他List方法。因此,我通常有一个内部属性,公开要在程序集中使用的List。
欢迎对这种方法提出意见。