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首先包装,以及这将如何与良好的实践相吻合.
我会考虑double在结构而不是类中包装.
没有办法说" T必须要么是double实现IBar",但在结构中包含原始值是完全合理的(假设它实际上对于它的意义是有意义的IBar;我们目前对此一无所知).