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