c# - 确保封装的建议

标签 c# oop encapsulation

在我的解决方案中,我有一个 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 对 Project1Project2 都是不可见的。如果我删除 internal 访问器,那么 setter 将可用于任何引用定义 dll 的程序集。我不想这样,因为 class A 上的信息非常重要,不能设置错误。

如何限制从Project1Project2 外部访问A 类 的setter?

我想到的唯一解决方案是使用 InternalsVisibleTo。我不知道,这听起来并不完美。将 Project1Project2 结合起来也是另一种解决方案,但这两者负责完全不同的任务,这不是设计上的最佳选择。

最佳答案

您可以保留内部保护程序,但让另一个程序集信任访问内部成员。

[assembly: InternalsVisibleTo("AssemblyName")]

您可以在类级别执行此操作,也可以根据需要在整个程序集本身执行此操作。

InternalsVisibleToAttribute Class

关于c# - 确保封装的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6783888/

相关文章:

c# - 发送电子邮件的正确代码,asp.net

c# - Azure WebJob 自动中止

c# - 如何在像素艺术编辑器中优化绘制区域

c# - 如何在 UWP 中重新实例化页面/ View 模型?

php - 更改子类的 protected 变量的值

PHP对子类的神奇方法__call

oop - Doctrine2 ORM 不会保存对 DateTime 字段的更改

c# - 对于多条消息和成功/失败,是否有替代通知模式的方法?

iphone - 声明私有(private)成员变量

oop - 公共(public)与私有(private)?