0

我有两个用于 Unity 运行时和编辑器扩展的类库“MyLibrary.dll”和“MyLibraryEditor.dll”。“MyLibrary.dll”中有几个类成员仅供“MyLibraryEditor.dll”使用。

我的第一个想法是使用internal关键字,因为我错误地认为这会限制对命名空间的可见性。相反,很明显这个关键字限制了程序集的可见性。

在不影响性能的情况下,将某些类成员的访问权限限制为“MyLibrary.dll”和“MyLibraryEditor.dll”的最佳方法是什么?此外,反射不是一种选择。

我很高兴简单地不记录这些功能,但不幸的是 Intellisense(和 MonoDevelop 的等价物)显示了这些成员。

4

3 回答 3

5

如果您希望一个程序集中的内部构件在另一个程序集中可见,您可以InternalsVisibleTo在包含该构件的程序集中使用该属性。请参阅http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.internalsvisibletoattribute.aspx

[assembly:InternalsVisibleTo("MyLibraryEditor")]

这就是答案,您可能需要重新考虑您的架构设计,以便您不需要使用它,因为它将向其他组件开放所有内部结构,而不仅仅是您想要的那些。

于 2012-06-20T16:40:26.763 回答
3

您可以创建成员internal,但用于[InternalsVisibleTo]向其他程序集授予这些成员的访问权限。当然,它们在同一个程序集中仍然是可见的……没有办法绕过这一点。

我主要InternalsVisibleToAttribute用于授予内部成员访问测试类的权限,并且会尽量避免出于非测试目的这样做——但有时它可能很有用。

于 2012-06-20T16:40:58.083 回答
0

使用纯 C# 概念这是不可能的。你是两个独立的程序集,尽可能地独立,就.Net而言,两者之间没有关系。

您可以通过签名或验证来做一些事情,因此很难在没有另一个程序集的情况下使用一个程序集,但您不能做一些事情来防止类/成员的可见性。

于 2012-06-20T16:39:06.040 回答