C# 在导出 DLL 时隐藏类成员

本文关键字:隐藏 成员 DLL | 更新日期: 2023-09-27 18:33:45

当我将

DLL 发布到第三方应用程序时,是否可以仅使某些方法对最终用户可见?

我的代码建立在 7-8 个相互调用的不同项目上,它们有不同的命名空间,如"Company.ProjectName",我认为它们与"Company"命名空间相关,我只希望其中一个项目(具有定义的接口 BTW)对外部世界可见。

解决方案中的每个项目都编译成 DLL,然后我使用 ILASM 将它们组合在一起。

顺便说一句,解决方案中还有其他项目使用这些项目与此 dll 无关。

编辑:即使命名空间构造为"公司名称.项目1","公司名称.项目2",internal关键字是否有效?他们会见面吗?

C# 在导出 DLL 时隐藏类成员

你不需要

组合它们,你只需要一个朋友程序集:

开发类库时,对库的添加包含在单独的程序集中,但需要访问标记为"友元"(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将不可见。