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

Ali*_*yan 1 c# generics primitive wrapper

说我有这个通用类:

abstract class Foo<T> where T : IBar
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

我对IBar界面的想法是将算术作为一项要求.现在将来,如果我尝试使用Foo其他类/结构来实现IBar它应该没问题.但我也想double工作.所以现在我正在寻找的是一个很好的理由,甚至double首先包装,以及这将如何与良好的实践相吻合.

Jon*_*eet 5

我会考虑double结构而不是类中包装.

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