我有这个界面
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
接口(interface)并实现了它的所有成员并添加了支持字段,因为我需要实现 INotifyPropertyChanged
.
并使我的类继承自 ColumnBase,并且我确实覆盖了不应该相同的实现。
我对接口(interface)和抽象类的经验非常有限,我的问题是如果你有一个接口(interface)和一些将从它继承的类并且你意识到一些但不是所有属性和函数的实现是相同的,做您创建一个抽象类并将默认实现放入具有特殊实现的类中并覆盖它?
最佳答案
这将根据意见和偏好为您提供答案。
恕我直言,我认为这最适合将需要不同实现的两个方法声明为抽象方法的抽象类;在方法上使用抽象意味着实现必须具有该方法的实现。
public abstract class ColumnBase
{
public bool IsVisible { get; set; }
public bool IsGroupBy { get; set; }
public Type CLRType { get; set; }
public virtual string GetGroupByString()
{
return "base string";
}
public abstract string GetFilterString();
}
public class ConcreteColumn : ColumnBase
{
public override string GetGroupByString()
{
return "concrete string";
}
public override string GetFilterString()
{
return "who owns the filter string?";
}
}
关于c# - 接口(interface)和共享实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21322024/