例如,我在程序集 A 中定义了以下代码:
public abstract class Message
{
public int ID { get; internal set; }
public Message Parent { get; internal set; }
}
从程序集 B,我需要执行以下操作:
instanceOfMessage.ID = MethodToGetUniqueIDNumber();
instanceOfMessage.Parent = MethodToGetParent(); // Returns null /w no parent
目前,我正在使用InternalsVisibleTo编译器选项来解决这个问题:
[assembly:InternalsVisibleTo ("AssemblyB")]
// Namespace stuff here
public class Message
{
public int ID { get; internal set; }
}
不得不弄乱编译器选项来完成这项工作,这有点令人讨厌。所以,我的问题是:
- 在这种情况下可以使用 InternalsVisibleTo 吗?
- 我应该只公开财产并希望没有人改变任何东西吗?
- 我什至应该这样做吗?
我的最终目标是某个人,可能只是我和我的团队,应该能够使用消息,但强制诸如 ID 之类的属性永远不会从管理它们的类之外更改。但是,我们仍然需要创建消息等实例。
我的最终目标是我和我的团队应该能够在第三个程序集(程序集 C)中从 Message 继承。程序集 C 只知道程序集 A。程序集 B 稍后会动态加载。C 将使用 A 提供的接口向 B 发送消息。