Страницы

Поиск по вопросам

среда, 22 января 2020 г.

“Множественное наследование” c#

#c_sharp #наследование


Есть иерархия классов, появилась ситуация в которой не могу придумать нормального
решения. (стрелками показано наследование, красным цветом - желаемое, но невозможное )

  

Классы U, S, A, W используют одну и ту же реализацию функции F

А классы SAI, AAI, WAI другую, но общую между собой. Именно это и не получается реализовать
так как нет возможности создать дополнительный класс AI реализовать в нем F  и тогда
наследоваться от него. Получается что придется просто копировать реализацию  F для
SAI, AAI, WAI, что есть плохо. 

Какой есть способ красиво решить эту проблему??

Спасибо!
    


Ответы

Ответ 1



Множественное наследование от нескольких классов невозможно. Используйте интерфейс IFunctionF и два вспомогательных класса F1 и F2, каждый из которых имеет свою реализацию IFunctionF. И далее от F1 и F2 наследуйте ваши семейства U,A,S,W от F1 и SAI, AAI, WAI от F2. public interface F { int F(); } class F1:F { public virtual int F() { return 2; } } class F2 : F { public virtual int F() { return 3; } } class S : F1 { void a() { F(); } } class AAI : F2 { void a() { F(); } }

Ответ 2



C# Extension methods (методы расширения) возможно помогут вам с переиспользованием кода (но, не факт, т.к. вы не сможете использовать приватные члены классов). Пример: Interface IFoo {} public static class IFooExtensions { public static int F(this IFoo foo) { //.... } } //........... int value = (myObj as IFoo).F();

Комментариев нет:

Отправить комментарий