可能这种方式会对某人有所帮助。您可以通过在 fabric-library 类中放置 add、multiplicate 函数来改进这一点。
更新
可能会将来自 JerKimball 的 Operator 放入 counstructor
class Matrix <T>
{
T[][] elements;
public Matrix(Func<T, T, T> add, Func<T,T,T> multiplicate)
{
this.Add = add;
this.Mult = multiplicate;
}
public Matrix<T> operator +(Matrix<T> p1, Matrix<T> p2)
{
// correct this
var t = Add(p1.elements[0][0], p2.elements[0][0]);
return this;
}
public Matrix<T> operator *(Matrix<T> p1, Matrix<T> p2)
{
// correct this
var t = Mult(p1.elements[0][0], p2.elements[0][0]);
return this;
}
private Func<T, T, T> Add { get; set; }
private Func<T, T, T> Mult { get; set; }
}
static void Main(string[] args)
{
var m1 = new Matrix<int>((x,y) => x + y, (x,y) => x * y);
var m2 = new Matrix<int>((x, y) => x + y, (x, y) => x * y);
}
更新 2
只需像这样提供对属性的访问权限:
public T[][] Elements { get; set; }
你可以这样做:
m1.Elements[0][0] = 10;
var m3 = new Matrix<int?>((x, y) => x + y, (x, y) => x * y);
m3.Elements[0][0] = null;