Mar*_*tes 2 c# overloading operators matrix
我需要的是在C#中重载Operator +所以我可以总结2个矩阵.
我有这个功能:
public int[,] operator+(int[,] matriz1, int[,] matriz2)
{
int[,] retorno = new int[4, 4];
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
retorno[i, j] = matriz1[i, j] + matriz2[i, j];
}
}
return retorno;
}
Run Code Online (Sandbox Code Playgroud)
当我这样做时(WT,W1,W2都是int [4,4]):
WT = W1 + W2;
Run Code Online (Sandbox Code Playgroud)
我得到一个错误说:operator +不能应用于int [ , ]和int [ , ] 类型的操作数,我做错了什么,我该如何解决?
好吧,首先,在你尝试使用运算符之前,尝试仅编译运算符方法.它不会编译,错误消息告诉:
错误CS0563:二元运算符的其中一个参数必须是包含类型
这正是它所说的:如果你写一个类C,你可以为C + <any type>(或<any type> + C)编写一个加法运算符.您无法定义不C以某种方式涉及的运算符.所以,简单地说,因为你不是那个编写int[,]类的人,所以你不能为它定义一个运算符.
您最好的选择可能是自己定义一个Matrix类,然后您可以定义您想要的任何操作符.例如;
public class Matrix
{
private readonly int[,] _values;
public int this[int x, int y] {
get { return _values[x, y]; }
}
public Matrix(int[,] values) {
_values = values;
}
public static Matrix operator +(Matrix x, Matrix y) {
int[,] m0 = x._values;
int[,] m1 = y._values;
int[,] newMatrix = /* add m0 and m1 */;
return new Matrix(newMatrix);
}
}
Run Code Online (Sandbox Code Playgroud)