Я написал созданный владельцем TabControl
, но наш проект также использует TabWorkspace
, который происходит от TabControl
. На данный момент у меня есть
public class OurTabControl : TabControl
{
// some code that overrides protected methods
}
public class OurTabWorkspace : TabWorkspace
{
// the same code
}
Я хотел бы, чтобы общий код отображался в одном месте, поэтому нам не нужно поддерживать две копии. Возможно ли это в С#, и если да, то как?
Вы можете сделать это с помощью интерфейса и написать метод расширения.
class OurTabControl: IBehavior
class OurTabWorkspace: IBehavior
interface IBehavior
{
}
static class BehaviorExtensions
{
static [returntype] RepeatedBehavior(this IBehavior behavior)
{
//repeated code here
}
}
Вы можете создать внутренний вспомогательный класс, содержащий общий код, и указать его как частный член в OurTabControl и OurTabWorkspace. Поскольку TabWorkspace расширяет TabControl, вы должны иметь возможность использовать полиморфизм и передавать параметры TabControl методам в классе-помощнике. Вам все равно придется переопределять любые распространенные методы в обоих ваших расширенных классах и вызывать методы вспомогательного класса и/или базовые методы оттуда.
Возможно, реорганизуйте общий код в один набор статических методов?
Как насчет использования частичного класса? Или, как насчет определения всех общих методов в одном классе и унаследованных им экземпляров классов.