使用getter / setter作为数组

时间:2014-06-21 20:08:52

标签: c#

我正在尝试为数组创建一个getter / setter,但我不确定如何编写它。该类将具有多个属性,需要修改并从另一个类访问。这是我想要做的事情的想法:

class MyArrayClass {
    private double[] myArray = {1.1, 2.2};

    public double MyArray {
        get { return myArray[index]; }
        set { myArray[index] = value; }
    }
}

class AnotherClass {
    MyArrayClass mAC = new MyArrayClass();
    mAC.MyArray[1] = 3.3;
}

现在代码不起作用,但我希望它表达我正在尝试做的事情。我能够使用下面的代码实现我想要的东西(它可以工作)但是它只适用于该类中的一个属性。

class MyArrayClass {
    private double[] myArray = {1.1, 2.2};

    public double this[int index] {
        get { return myArray[index]; }
        set { myArray[index] = value; }
    }
}

class AnotherClass {
    MyArrayClass mAC = new MyArrayClass();
    mAC[1] = 3.3;
}

我也不确定如何定义不同索引位置的值而不多次执行,例如。

mAC.MyArray[0] = 1.1;
mAC.MyArray[1] = 2.2;

与以下内容相反:

mAC.MyArray[0, 1] = {1.1, 2.2};

对不起,如果这是一团糟,但我希望它传达了我想要实现的目标。

3 个答案:

答案 0 :(得分:1)

由于您有多个数组,因此需要公开几个类似于数组的可索引属性。以第二个MyArrayClass为例,您可以这样做:

class MyTwoArrays {
    private MyArrayClass array1 = ...;
    private MyArrayClass array2 = ...;
    public MyArrayClass Array1 {
        get { return array1; }
    }
    public MyArrayClass Array2 {
        get { return array2; }
    }
}

现在您可以像这样使用它:

MyTwoArrays two = new MyTwoArrays();
two.Array1[0] = 123.456;
two.Array2[0] = 789.432;

答案 1 :(得分:0)

mAC.MyArray[0, 1] = {1.1, 2.2};

这不是它应该的方式,它必须一个接一个地完成。你正在使用的方式会改变它的二维数组,(不知何故,它会无效,零主要元素和每个元素中有1个元素)。

mAC.MyArray[0] = 1.1;
mAC.MyArray[1] = 2.2;

是设置数组的有效方法。

class MyArrayClass {
    private double[] myArray = {1.1, 2.2};

    public double this[int index] {
        get { return myArray[index]; }
        set { myArray[index] = value; }
    }
}

class AnotherClass {
    MyArrayClass mAC = new MyArrayClass();
    mAC[1] = 3.3;
}

代码有效,因为如果执行该过程的有效方式是因为仅在 this 情况下,您将实际的索引号传递给数组以从中返回值。在第一个代码块中,没有索引号,返回值是Array个对象。

答案 2 :(得分:0)

如果我理解正确,您希望索引器访问2个代表动物身高和体重的内部数组。

class MyArrayClass {
    private double[] heights = {1.1, 2.2};
    private double[] weights = {1.1, 2.2};

    public double[] this[int index] { //Or Tuple<double ,double>
        get { return new double[] { heights[index], weights[index] }; }
        set { heights[index] = value[0]; weights[index] = value[1]; }
    }
}

如果您打算从1个数组中访问2个数字,也可以这样做。

class MyArrayClass {
    private double[] myArray = {1.1, 2.2, 3.3, 4.4};

    public double[] this[int index] {
        get { return new double[] { myArray[index*2], myArray[index*2+1] }; }
        set { myArray[index*2] = value[0]; myArray[index*2+1] = value[1]; }
    }
}

这不包括检查索引或参数(它可以为null或长度为&lt; 2)。

在这种情况下,拥有一个Animal结构或其他东西可能更方便:

class MyArrayClass {
    private Animal[] animals = {new Animal(1.1, 1.1), new Animal(2.2, 2.2)}

    public Animal this[int index] {
        get { return animals[index]; }
        set { animals[index] = value; }
    }
}