【发布时间】:2015-12-09 04:08:41
【问题描述】:
我有一个如下定义的通用接口 (IAmMeasurable)。我有该接口的实现(Sales)。我正在尝试创建一个通用类 (Fact),以便我可以像这样实例化它:
var todaySales = new Fact<Sales>();
不幸的是,我不得不做以下事情:
var todaySales = new Fact<Sales, decimal>();
这似乎很尴尬,因为Sales 被定义为IAmMeasurable<decimal>。 decimal 隐含在 Sales 的使用中
public interface IAmMeasurable<TValue> where TValue : struct
{
}
public class Sales : IAmMeasurable<decimal>
{
}
public class Fact<TMeasure, TValue>
where TMeasure : IAmMeasurable<TValue>
where TValue : struct
{
public TValue Observed { get; set; }
}
也许这只是语言的限制?或者是否有另一种方法来构建它以实现我的目标?还是我根本没有正确考虑问题?
在我看来,有些东西是可衡量的,它们以特定类型衡量(销售额以美元衡量,以小数表示)。事实是对某种度量的观察。我观察到今天的销售额是 100 美元(1 亿)。
【问题讨论】:
-
Obvioulsy
Sales : IAmMeasurable<decimal>, IAmMeasurable<int>, IAmMeasurable<double>会混淆您的Fact如果您正在寻找的内容允许... -
啊!我没有意识到一个类可以两次实现相同的接口,提供不同的 TValues。有什么方法可以限制吗?
标签: c# .net generics c#-4.0 interface