【问题标题】:C# make class invisible to all namespaces other than its ownC# 使类对除自己的命名空间之外的所有命名空间不可见
【发布时间】:2018-10-25 13:28:27
【问题描述】:

假设我有命名空间Events,它只包含EventManagerEventType 类。

我希望EventType 在任何其他命名空间中不可见,唯一应该能够看到EventType 的类是EventManager

我该怎么做?我读过一些关于 Friend 的文章,但仍然不知道这是正确的选择。

【问题讨论】:

  • C# 中没有访问修饰符限制为命名空间。您只能将类型声明为 internal 以限制对包含程序集的可见性。
  • 我觉得你对班级的性别分配很有趣。
  • 不完全确定您的目的,但如果您在事件管理器中将 EventType 设为子/嵌套类,您可以将其设为 Protected 以防止其他类使用它,我相信。 stackoverflow.com/questions/1017778/protected-classes-in-net 更详细。
  • 您可以将EventType 设为EventManager 类中的私有类
  • @STLDeveloper:在法语中我相信它是 "la classe" - 如此女性化

标签: c# namespaces visibility


【解决方案1】:

你在这个XY Problem(同时)声明中表达了两个“想要”:

我希望 EventType 在任何其他命名空间中不可见,唯一的 应该能够看到 EventType 的类是 EventManager。

对于第一部分 (X),如 cmets 中所述,无法直接在 C# 中将对类的访问限制为仅单个命名空间。如果您将其设为internal 并将其隔离在一个包含该命名空间的程序集中,您就可以得到您想要的。

然而,这似乎是一种可疑的做法,当您开始添加代码时,您可能最终会放弃这种方法。

对于第二部分 (Y),您可以像这样使 EventType 仅对 EventManager 可见(这是您的真实意图

public class EventManager
{
     private class EventType
     { ... }
}

顺便说一句,朋友的想法来自C++。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 2011-04-11
    • 1970-01-01
    • 2014-11-15
    • 2010-12-23
    • 1970-01-01
    相关资源
    最近更新 更多