#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();
Комментариев нет:
Отправить комментарий