编写泛型类来处理内置类型

时间:2008-10-03 11:09:11

标签: c# .net generics oop

可能不太实用,但仍然很有趣。

对矩阵乘法有一些抽象的问题我已经快速实现了一个整数矩阵,然后测试了我的假设。

在这里我注意到只是int矩阵不好,如果我偶尔想用十进制或双精度。当然,我可以尝试将所有内容都加倍,但这不方便。

继续假设我们可以拥有一堆我们能够添加和增加的对象 - 为什么不在我的矩阵中使用它们?

所以,在考虑它将是一个Matrix类之后我现在面临无法使用泛型T,我需要它来支持一些可以添加和乘法的接口。

问题是我可以覆盖我的类中的运算符,但我无法引入支持运算符的接口。我有一个内置类型的运算符,但仍然没有接口。

考虑到你不想复制工人阶级的身体,你会在这种情况下做什么?包装和隐式铸造对我没什么帮助,我对一个漂亮的解决方案感兴趣。

感谢。

2 个答案:

答案 0 :(得分:5)

为此你需要通用数学。幸运的是I have done this。用法类似于这个“复杂”(即x + iy)example。 Operator类现在是MiscUtil的一部分。

答案 1 :(得分:2)

嗯,有一种技术较少的方法可以做到这一点。您无法为“int”或“double”添加新接口。但是,您可以声明一个对象的接口,该接口可以相乘并添加某些泛型类型的值。然后,您可以为所需的所有类型实现接口:

public interface ICalculator<T>
{

   T Add(T x, T y);
   T Multiply(T x, T y);

}

public class MatrixMultiplier<T>
{

  public MatrixMultiplier(ICalculator<T> calculator) { ... }

}

public class IntCalculator : ICalculator<int>
{

  public int Add(int x, int y)
  {
    return x + y;
  }

  public int Multiply(int x, int y)
  {
    return x * y;
  }

}