C # делает класс невидимым для всех пространств имен, кроме его собственного - PullRequest
0 голосов
/ 15 мая 2018

Предположим, у меня есть пространство имен Events, которое содержит только классы EventManager и EventType.

Я хочу, чтобы EventType был невидимым в любом другом пространстве имен, единственный класс, который должен бытьв состоянии видеть EventType это EventManager.

Как я могу это сделать?Я прочитал кое-что о Friend, но все еще не знаю, правильный ли это выбор.

1 Ответ

0 голосов
/ 15 мая 2018

Вы выразили два "желания" в этом XY Проблема (одновременно):

Я хочу, чтобы EventType был невидимым в любом другом пространстве имен, единственный класскто должен видеть EventType - это EventManager.

Для первой части ( X ), как упоминалось в комментариях, нет способа ограничить доступ к классутолько одно пространство имен непосредственно в C #.Вы можете получить то, что хотите, если вы сделаете его internal и изолируете его в сборке, содержащей только это пространство имен.

Однако это кажется сомнительной практикой, и по ходуо добавлении кода вы, вероятно, откажетесь от этого подхода.

Для второй части ( Y ) вы можете сделать EventType видимым только для EventManager ( thisэто ваше истинное намерение ) вот так

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

Кстати, идея друга пришла из C ++.

...