Нужна функциональность множественного наследования в C #.Что я делаю неправильно? - PullRequest
4 голосов
/ 21 июня 2011
class UDPClient
{
}

class LargeSimulator
{
}

class RemoteLargeSimulatorClient : UDPClient, LargeSimulator
{
}

Поговорка гласит: если вам нужно множественное наследование, ваш дизайн отключен.

Как бы я это сделал в C # без необходимости что-либо реализовывать?

Ответы [ 6 ]

5 голосов
/ 21 июня 2011

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

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

C # допускает только одиночное наследование, хотя вы можете наследовать от любого количества интерфейсов, сколько пожелаете.

Вы можете выбрать только один класс для наследования и сделать остальные интерфейсы, или просто сделать их всеми интерфейсами.

Вы также можете связать свое наследство так:

class UDPClient
{
}

class LargeSimulator : UDPClient
{
}

class RemoteLargeSimulatorClient : LargeSimulator
{
}
1 голос
/ 21 июня 2011

Одним из возможных заменителей множественного наследования являются миксины. К сожалению, в C # их тоже нет, но возможны обходные пути. Большинство полагается на использование методов расширения (как предлагал предыдущий ответчик). Смотрите следующие ссылки:

http://mortslikeus.blogspot.com/2008/01/emulating-mixins-with-c.html http://www.zorched.net/2008/01/03/implementing-mixins-with-c-extension-methods/ http://colinmackay.co.uk/blog/2008/02/24/mixins-in-c-30/

1 голос
/ 21 июня 2011

Чтобы получить множественное наследование так, как вам нужно, вам нужно сделать ваш UDPClient и LargeSimulator interface вместо class.

Классовое множественное наследование невозможно в C #

0 голосов
/ 21 июня 2011
interface ILARGESimulator
{
}

interface IUDPClient
{
}

class UDPClient : IUDPClient
{
}

class LargeSimulator : ILARGESimulator
{
}

class RemoteLargeSimulatorClient : IUDPClient, ILargeSimulator
{
    private IUDPClient client = new UDPClient();
    private ILARGESimulator simulator = new LARGESimulator();

}

К сожалению, вам нужно будет написать методы-обертки для членов.Множественное наследование в C # не существует.Однако вы можете реализовать несколько интерфейсов.

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

Краткий ответ: множественное наследование не разрешено в C #.Читайте об интерфейсах: http://msdn.microsoft.com/en-us/library/ms173156.aspx

Немного более длинный ответ: Возможно, вам подойдет какой-то другой шаблон проектирования, например шаблон стратегии и т. Д. Наследование - не единственный способ добиться повторного использования кода.

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