无法访问另一个类中的类字段

时间:2018-06-10 09:05:57

标签: c#

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所以如果没有意义,请不要介意代码。只是玩弄类和语法

2 个答案:

答案 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。