У меня есть этот интерфейсИнтерфейсы и реализации разделяемой
public interface IColumn
{
bool IsVisible {get;set;}
bool IsGroupBy { get; set; }
Type CLRType { get; set; }
string GetGroupByString();
string GetFilterString();
}
и у меня есть классы, которые наследуют от него, в течение первых 3-х свойств реализации точно так же.
для string GetGroupByString();
осуществления представляет собой то же самое для всех классов, кроме 2
так я сделал абстрактный класс ColumnBase
который наследует интерфейс IColumn
и реализует весь его членов и добавил отступающие поля, потому что мне нужно реализовать INotifyPropertyChanged
.
и сделал мои классы наследованием от ColumnBase, и я сделал переопределение импментаций, которые не должны быть одинаковыми.
У меня очень ограниченный опыт работы с интерфейсами и абстрактными классами, мой вопрос в том, есть ли у вас интерфейс и некоторые классы, которые наследуют его, и вы поняли, что реализация для некоторых, но не для всех свойств и функций одинакова, вы создаете абстрактный класс и ставите реализацию по умолчанию и переопределяете его внутри классов, имеющих специальную реализацию?
Да, это похоже на хорошее решение. Отметьте методы, которые вы разрешите переопределить как «виртуальные», и укажите конкретный тип подкласса в подклассах. –
@JeroenVannevel, но какая разница делает виртуальный? – Kanka
это предотвратит проблемы, скрывающие методы, в зависимости от того, насколько абстрактна ваша переменная. [Это] (http://msdn.microsoft.com/en-us/library/aa645767 (v = vs.71) .aspx) должно быть ясно. –