编写一个通用类来处理内置类型

时间:2020-03-06 15:04:10  来源:igfitidea点击:

也许不太实用,但仍然很有趣。

对于矩阵乘法有一些抽象的问题,我迅速为整数实现了一个矩阵,然后检验了我的假设。

在这里我注意到,如果我偶尔想将其与十进制或者双精度值一起使用,那么仅使用int矩阵是不好的。当然,我可以尝试将所有内容都加倍,但这不是方便的方法。

继续假设我们可以拥有一堆能够相乘并相乘的对象,为什么不在矩阵中使用它们呢?

因此,在考虑到现在将是一个Matrix类之后,我面对无法使用通用T的情况,我需要它来支持一些可以相乘和相乘的接口。

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

考虑到我们不想重复工人阶级的身体,在这种情况下我们会怎么做?包装程序和隐式强制转换对我没有多大帮助,我对一个漂亮的解决方案感兴趣。

谢谢。

解决方案

为此,我们需要通用数学。幸运的是我已经做到了。用法将类似于此"复杂"(即x + iy)示例。
现在,Operator类是MiscUtil的一部分。

嗯,这样做的技术较少。我们不能为" 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;
  }

}