C# 在导出 DLL 时隐藏类成员
本文关键字:隐藏 成员 DLL | 更新日期: 2023-09-27 18:33:45
当我将
DLL 发布到第三方应用程序时,是否可以仅使某些方法对最终用户可见?
我的代码建立在 7-8 个相互调用的不同项目上,它们有不同的命名空间,如"Company.ProjectName",我认为它们与"Company"命名空间相关,我只希望其中一个项目(具有定义的接口 BTW)对外部世界可见。
解决方案中的每个项目都编译成 DLL,然后我使用 ILASM 将它们组合在一起。
顺便说一句,解决方案中还有其他项目使用这些项目与此 dll 无关。
编辑:即使命名空间构造为"公司名称.项目1","公司名称.项目2",internal
关键字是否有效?他们会见面吗?
你不需要
组合它们,你只需要一个朋友程序集:
开发类库时,对库的添加包含在单独的程序集中,但需要访问标记为"友元"(Visual Basic) 或内部 (C#) 的现有程序集中的成员。
...
只有显式指定为友元的程序集才能访问友元 (Visual Basic) 或内部 (C#) 类型和成员。
InternalsVisibleTo 属性:
[assembly: InternalsVisibleTo("AssemblyB")]
帮助锁定它,以便只有指定的程序集才能访问internal
项。
(回答您的编辑:这是在程序集级别指定的,命名空间是什么并不重要)。
使用 internal
请参阅下面的示例
public class MyPublicClass
{
public void DoSomething()
{
var myInternalClass = new MyInternalClass();
myInternalClass.DoSomething();
}
}
internal class MyInternalClass
{
public void DoSomething()
{
}
}
在 DLL 中,外部用户(引用 DLL 的用户)可以看到MyPublicClass
。
MyInternalClass
将不可见。