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

本文关键字:泛型类 处理 内置 置类型 一个 | 更新日期: 2023-09-27 17:47:24

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

有了一些关于矩阵乘法的抽象问题,我很快就为int实现了一个矩阵,然后测试了我的假设。

在这里,我注意到,如果我偶尔想把它和十进制或双精度一起使用,那么仅仅使用int矩阵是不好的。当然,我可以尝试将所有属性都转换为双属性,但这不是一种方便的方式。

继续假设我们可以有一堆可以相加和相乘的对象——为什么不在矩阵中使用它们呢?

所以,在考虑到它将是一个矩阵类之后,我现在面临着通用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;
  }
}