【发布时间】:2014-05-03 17:14:06
【问题描述】:
我有一个关于命名具有相似功能的多个类的问题。我正在开发一个科学 API,并拥有以下类/接口:
public interface IRange<T>{
T Minimum {get;}
T Maximum {get;}
// A few other methods that aren't important
}
public class Range<T> : IRange<T> where T: IComparable<T> {
public T Minimum {get; protected set;}
public T Maximum {get; protected set;}
public Range(T minimum, T maximum) {
Minimum = minimum;
Maximum = maximum;
}
}
对于我的 API,我经常使用 double 范围(即 Range<double>),因此我创建了另一个名为 MassRange 的类。这个类还有一些新的构造函数和属性,如下所示:
public class MassRange : Range<double>, IRange<double> {
public double Width { get { return Maximum - Minimum;} }
public double Mean { get { return (Maximum + Minimum) / 2.0;} }
public MassRange(double mean, MassTolerance width) {
Minimum = mean - width.Value; // pseudo-code
Maximum = mean + width.Value;
}
}
从概念上讲,我还有另一种类型的Range<double>,称为MzRange,它与MassRange 共享所有相同的结构和功能,但我想在API 中保持独立。它们的行为完全相同并存储相同类型的数据,但就科学而言,它们是不同且截然不同的。
所以我考虑将MassRange 类重命名为更通用的名称DoubleRange,然后将MassRange : DoubleRange 和MzRange : DoubleRange 设计成这样:
public MzRange : DoubleRange, IRange<double> {}
public MassRange : DoubleRange, IRange<double> {}
但我并不真正关心 DoubleRange 这个名字,也不想通过我的 API 公开它。公开具有相同功能的两种不同类型是否合适?我是否应该为DoubleRange 取一个更好的名字而放弃MzRange 和MassRange?我可以将DoubleRange 设为内部或其他东西,这样它就不会通过 API 公开但仍然可以使用?
这似乎是Extension Properties 的情况,但我知道它们目前不存在。
【问题讨论】:
标签: c# inheritance nomenclature