Как я могу создать класс A в C #, где A может наследоваться только от B, C, D? - PullRequest
5 голосов
/ 15 июня 2011

Существует некоторый механизм, позволяющий наследовать класс от N классов только в C #?

Ответы [ 5 ]

7 голосов
/ 15 июня 2011

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

4 голосов
/ 15 июня 2011

Нет, но вы всегда можете заставить конструктор выдать исключение, если оно превышает предел.

3 голосов
/ 15 июня 2011
// can be inherited only by classes in the same assembly
public abstract class A
{
    protected internal A() { }
}

// can't be inherited
public sealed class B : A
{
}
1 голос
/ 15 июня 2011

Только для моего личного назидания, я хотел бы узнать больше о бизнес-контексте, который делает такой выбор дизайна желательным, так как мой первый взгляд на чтение заголовка был «О, очень очень плохая идея! Базовый класс НИКОГДАдолжен знать что-нибудь (и хуже: править) его производные классы ".

0 голосов
/ 15 июня 2011

Вы можете сделать класс A abstarct и наследовать его в любом количестве классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...