【问题标题】:Accessibility in .Net Class Library.Net 类库中的可访问性
【发布时间】:2013-07-18 13:53:20
【问题描述】:

我正在开发一个类库,但在可访问性方面遇到了问题。我的类库包含几个不应从其他应用程序访问的内部类。相反,我想创建一个包含所有内部类实例的单例主类,以便其他应用程序可以访问主类,然后使用该实例中的内部类。下图解释了层次结构。

我尝试将 Main Class 设为 public,Internal Classes 设为内部,但这给了我错误“Inconsistent Accessibility”。我的主类如下所示:

public class Main
{
    private static Main Instance;
    public static Main GetInstance()
    {
        if (Instance == null)
            Instance = new Main();
        return Instance;
    }

    public Debugging Debugger = new Debugging();
}

我的一个内部类(调试)如下所示:

internal class Debugging
{
    Content....
}

所以我希望有人可以帮助我弄清楚如何使内部类只能通过我的单例主类访问。

【问题讨论】:

  • 目前最简单的方法可能是简单地创建类public,但它们的构造函数internal。这将使您可以轻松地公开该类及其成员,但外部程序集将无法实例化它们自己的一个。
  • 如果您只希望Debugging 仅在Class Library 中可访问/可见,则创建类internal,并在Main 中将其声明为internal Debugging Debugger = new Debugging()
  • 谢谢,您想将您的第一条评论作为答案以便我接受吗?

标签: c# .net class class-library


【解决方案1】:

你的问题我不肯定你的意图是什么,所以我将它分为两​​个选项:

您希望外部程序集可以访问 `Debugging`,但只能通过 `Main` 访问

有几种方法可以做到这一点,但现在最简单的方法是保留Debugging public,但只定义internal 构造函数。这将允许使用它,但外部程序集将无法实例化它们,从而迫使它们访问在 Main 上创建的实例

public class Debugging
{
    internal Debugging() { }
}

您不希望外部程序集可以访问 `Debugging`,但仍可以通过 `Main` 在您的类程序集中访问

只需将Main.Debugger 的可访问性修饰符更新为internal

internal Debugging Debugger = new Debugging();

【讨论】:

  • 抱歉不清楚。我希望外部程序集可以访问“调试”。感谢您的帮助!
【解决方案2】:

如果你有一些public 访问权限(通过Main 类),你必须设置你所有的类public

否则,您可以将内部类设置为internal,并在Main 类(包装内部类的字段/方法)中提供一组属性,以便访问它们的字段/方法。您可以将内部类的构造函数设置为internal,以避免这些类实例化。

一般来说:public 类公开的每个字段/方法都应该有一个 public 返回类型。

Some MSDN reference

【讨论】:

    【解决方案3】:

    如果您需要访问库外部的 Debugger 类,您需要将访问修饰符更改为 public。正如建议的那样,将构造函数设置为内部的,这样程序集之外的任何人都不能创建这些类的实例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-12
      • 1970-01-01
      相关资源
      最近更新 更多