实现接口的通用还是双重?

时间:2014-02-27 18:04:49

标签: c# generics wrapper primitive

说我有这个通用类:

abstract class Foo<T> where T : IBar

这里很好,但我也希望能够通过double。现在我被告知这是一个坏主意,解决这个问题的唯一方法是编写一个处理双重案例的重复类。我也被告知,玩这样的原始类型并不是一个好主意。

我想做的是将double包装在实现IBar的类中。这将允许我使用包裹的双。我可以看到使用该类的一些问题,我再次被告知,为这些目的包装原始类型是一个坏主意。

  • 解决这个问题的好方法是什么?
  • 是时候让我重新考虑使用双打吗?
  • 我是否应该创建一个单独的复制类来处理双打? (在我看来,这听起来好像我没有重复使用)。
  • 当必须以通用方式处理基元时,经验法则(如果有的话)是什么?

catagorised的结构是我们知道的doubleBigRational结构。这是两个System.Numerics.BigInteger成员之间的商的表示。算术是在这个结构上完全定义的,Foo应该为Tdouble定义BigRational正在做什么。

现在恰当的原因是这些无关,因此创建一个界面来联合它们是糟糕的做法(更不用说首先包装原语了) )。

我对IBar接口的想法是将算术作为一项要求。现在将来,如果我尝试将Foo用于实现IBar的其他类/结构,那么应该没问题。 但我希望double能够正常工作。所以现在我正在寻找的是一个很好的理由甚至首先包装double以及它如何与好的一致实践。

1 个答案:

答案 0 :(得分:5)

我会考虑将double包装在 struct 而不是类中。

没有办法说“T必须是double或实现IBar”,但在结构中包含原始值是完全合理的(假设它实际上对于含义有意义IBar;我们目前对此一无所知。)