Какой паттерн лучше использовать при необходимости реализации методов из разных классов? Пожалуйста, подскажите:
Есть интерфейс/абстрактный класс A
В нем 2 метода без реализации M1 и M2
Есть класс B, отнаследованный от A
Есть класс C, отнаследованный от A
В обоих своя реализация методов M1 и M2
Предположим, мне надо создать класс D, в котором M1 содержит реализацию класса B, а метод M2 реализацию класса C.
Множественного наследования в C# нет. Есть какое-нибудь общепринятое решение или готовый паттерн для таких ситуаций?

21 Авг 2019 в 07:00
163 +1
1
Ответы
1

В данном случае можно воспользоваться паттерном композиции или делегирования.

Вы можете создать класс D, который будет содержать в себе экземпляры классов B и C, и делегировать выполнение методов M1 и M2 соответственно экземплярам классов B и C.

Примерно так:

public interface A
{
void M1();
void M2();
}
public class B : A
{
public void M1()
{
// Реализация M1 для класса B
}
public void M2()
{
// Реализация M2 для класса B
}
}
public class C : A
{
public void M1()
{
// Реализация M1 для класса C
}
public void M2()
{
// Реализация M2 для класса C
}
}
public class D : A
{
private B b = new B();
private C c = new C();
public void M1()
{
b.M1();
}
public void M2()
{
c.M2();
}
}

Таким образом, класс D будет содержать в себе экземпляры классов B и C, и делегировать реализацию методов M1 и M2 соответственно этим экземплярам.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир