在我的解决方案中,我有一个 DLL 项目,比如 Project1
,它拥有一个类,比如 class A
。这个类有一些属性,非常重要,只能在这个 DLL 中设置。引用此 DLL 的任何其他项目只能使用 getter。到目前为止,我已经通过在内部访问 setter 来处理这种情况,例如:
public class A
{
int Num1
{
get;
internal set;
}
int Num2
{
get;
internal set;
}
}
现在我必须向解决方案添加另一个项目 Project2
,该解决方案不仅必须使用 class A
(getter 和 setter)而且 Project1
引用了这个新项目。所以我决定在不同的定义 dll 中将 class A
分开,放在层次结构的顶部。这就是重点,我的问题出现了。现在所有的 setter 对 Project1
和 Project2
都是不可见的。如果我删除 internal
访问器,那么 setter 将可用于任何引用定义 dll 的程序集。我不想这样,因为 class A
上的信息非常重要,不能设置错误。
如何限制从Project1
和Project2
外部访问A 类
的setter?
我想到的唯一解决方案是使用 InternalsVisibleTo
。我不知道,这听起来并不完美。将 Project1
和 Project2
结合起来也是另一种解决方案,但这两者负责完全不同的任务,这不是设计上的最佳选择。
最佳答案
您可以保留内部保护程序,但让另一个程序集信任访问内部成员。
[assembly: InternalsVisibleTo("AssemblyName")]
您可以在类级别执行此操作,也可以根据需要在整个程序集本身执行此操作。
关于c# - 确保封装的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783888/