public class Vector
{
public int[] row = new int[2];
public Vector(int x, int y)
{
this.row[0] = x;
this.row[1] = y;
}
public int[] Row
{
get
{
return row;
}
}
}
public class Matrix<Vector>
{
public Vector[] rows = new Vector[2];
public Matrix(Vector v1, Vector v2){
this.rows[0] = v1;
this.rows[1] = v2;
}
public void Transform()
{
foreach (Vector v in rows)
{
Console.WriteLine(v.row[0]);
}
}
}
我得到'Vector'不包含'row'的定义,我不明白为什么。它设置为公开,我正在迭代矢量对象。我在这里做错了什么?
这是我第一次使用c#,来自python所以如果没有意义,请不要介意代码。只是玩弄类和语法
答案 0 :(得分:3)
这里正如你在问题中写的那样,
public class Matrix<Vector>
表示您的类Matrix
是通用的,并且在创建Matrix
实例时您将传递的任何类型,此类的代码将该类型视为Vector
。
请注意,您的班级Vector
的类型与Vector
班级中的Matrix
类型完全不同。
对于前。
如果您创建一个像这样的矩阵对象,
Matrix<string> m = new Matrix<string> ("amit", "maheshwari");
这将是有效的,对于Matrix
的这个instacne,Vector
将是字符串。是的string
不包含&#39;行&#39;的定义Vecotr
也是如此。
所以,也许你是在滥用这门课。
或者,如果您已经自己创建了这个类,并且想要执行您所显示的内容,则无需使此类具有通用性。
public class Matrix
{
//so now this array of vector will be of class Vector
public Vector[] rows = new Vector[2];
public Matrix(Vector v1, Vector v2){
this.rows[0] = v1;
this.rows[1] = v2;
}
public void Transform()
{
foreach (Vector v in rows)
{
Console.WriteLine(v.row[0]);
}
}
}
答案 1 :(得分:0)
public class Matrix<TVector> where TVector : Vector
{
public TVector[] rows = new TVector[2];
public Matrix(TVector v1, TVector v2)
{
this.rows[0] = v1;
this.rows[1] = v2;
}
public void Transform()
{
foreach (TVector v in rows)
{
Console.WriteLine(v.row[0]);
}
}
}
感谢John和其他朋友的回复快速回答。你必须使用TVector。