首页 > 解决方案 > C# 使类对除自己的命名空间之外的所有命名空间不可见

问题描述

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

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

我怎样才能做到这一点?我读了一些关于Friend但仍然不知道这是正确的选择。

标签: c#namespacesvisibility

解决方案


您在此XY 问题(同时)声明中表达了两个“想要” :

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

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

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

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

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

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


推荐阅读