说我有这个通用类:
abstract class Foo<T> where T : IBar
这里很好,但我也希望能够通过double
。现在我被告知这是一个坏主意,解决这个问题的唯一方法是编写一个处理双重案例的重复类。我也被告知,玩这样的原始类型并不是一个好主意。
我想做的是将double
包装在实现IBar
的类中。这将允许我使用包裹的双。我可以看到使用该类的一些问题,我再次被告知,为这些目的包装原始类型是一个坏主意。
catagorised的结构是我们知道的double
和BigRational
结构。这是两个System.Numerics.BigInteger
成员之间的商的表示。算术是在这个结构上完全定义的,Foo
应该为T
和double
定义BigRational
正在做什么。
现在恰当的原因是这些无关,因此创建一个界面来联合它们是糟糕的做法(更不用说首先包装原语了) )。
我对IBar
接口的想法是将算术作为一项要求。现在将来,如果我尝试将Foo
用于实现IBar
的其他类/结构,那么应该没问题。 但我希望double
能够正常工作。所以现在我正在寻找的是一个很好的理由甚至首先包装double
以及它如何与好的一致实践。
答案 0 :(得分:5)
我会考虑将double
包装在 struct 而不是类中。
没有办法说“T
必须是double
或实现IBar
”,但在结构中包含原始值是完全合理的(假设它实际上对于含义有意义IBar
;我们目前对此一无所知。)