Как сделать возможным присваивать значение массиву, при этом невозможно присвоить каждому из элементов массива индивидуально? - PullRequest
0 голосов
/ 17 марта 2019

Я работаю над проектом Unity3D и использую класс Mesh,
внутри класса Mesh есть переменная-член Vector3[] vertices.
Теперь при установке mesh.vertices следующим образом

Vector3[] v = new Vector3[3];
v[0] = new Vector3[0,0,0];
v[1] = new Vector3[1,1,1];
v[2] = new Vector3[2,2,2];
mesh.vertices = v; 

возможно установить отдельный элемент, например: mesh.vertices[0] = new Vector3(1,1,1), кажется, не имеет никакого эффекта.
(также, mesh.vertices[0].x = 5 также не имеет никакого эффекта).
Когда я говорюне имеет значения, я имею в виду, что код компилируется и выполняется без ошибок, но элементы массива не меняются.
Поскольку вершины представляют поверхность, кажется логичным, что разработчик хотел, чтобы все они были изменены вместе.

Я пытался имитировать эту магическую функциональность с помощью простого кода, но безрезультатно.
Что мне не хватает?
Это что-то со свойствами?
Индексаторы?
Какая-то странная комбинация?

class Student
{
  private int[] grades = {92, 99, 96};
  public int[] Grades{
      get{
          Console.WriteLine("getter: ");
          return grades;
      }
      set{
          Console.WriteLine("setter: ");
          grades = value;
      }
  }
}

class HelloWorld
{
  static void Main ()
  {
    int[] low_grades = {53, 51, 55};
    Student student = new Student();
    student.Grades = low_grades; // This assignment is possible and this is O.K.
    student.Grades[0] = 52;  // This assignment is Possible and this is NOT O.K.
  }
}

Как я могу сделать так, чтобы клиент мог присвоить массив моей переменной-члену, но не дать ему присваивать значения отдельным элементам в массиве?

1 Ответ

1 голос
/ 17 марта 2019

Если вы не хотите иметь прямой доступ к элементам set, сделайте это приватным полем и предоставьте метод для установки массива.Если вы хотите, вы также можете предоставить метод для возврата копии массива в виде отдельной ссылки.

...