2012-06-25 4 views
2

У меня есть внутренний класс A, который делает много вещей, и у меня есть набор других классов B, D, E, которые наследуются от класса A. Конечно, это не сработает, поскольку компилятор будет жаловаться на публичный класс, который не сможет расширить внутренний (см. this для объяснения).Открытый класс расширяет внутренний класс

Я не хочу, чтобы A был общедоступным, так как я не хочу, чтобы мои пользователи наследовали его. Я хочу, чтобы они использовали только B, D, E.

Я знаю, что могу скрыть класс от Intellisense с помощью [EditorBrowsable(EditorBrowsableState.Never)] но пользователи могут получить доступ к нему с помощью отражения :(

Есть ли способ, я могу добиться этого?

+0

Почему классы 'B',' D' и 'E' находятся вне сборки' A'? Эта сортировка передает, что 'B, D, E' являются _" пользователями "_ или посторонними, если хотите. Поэтому 'A' должно быть просто публично. – gideon

+0

@gideon Не имеет значения, они могут быть либо у нас. Я просто не хочу выставлять базовый класс – GETah

+0

Вы хотите разрешить наследование от класса к избранным? – hometoast

ответ

5

Предполагая, что A находится в сборке и B, D и E находятся в сборке BDE, вы можете объявить InternalsVisibleTo attribute на сделать BDE сбор друга. Например, B, D и E смогут видеть A.

Тем не менее, вы не можете наследовать от A, поскольку суперклассы не могут иметь более низкую видимость, чем подклассы. Вы можете решить это, объявив Aобщественностью при изготовлении всех его конструкторов внутренний. Таким образом, только код с внутренний доступ к A сможет быть получен от A.

+0

Извините, мой плохой, я имел в виду +1 :) – GETah

+0

@ GETah: Ах, неважно тогда :-) –

+1

Ты прибил его !!! Спасибо – GETah

Смежные вопросы