У меня есть абстрактный родительский класс, который инкапсулирует доступ к массиву MyObjects:
public abstract class MyObjectIterator
{
public MyObjectIterator(MyObject[] MyObjects) { //constructor }
public Vector2 [] Coords { //A Get Function }
public Model[] Params { //A Get Function }
//THIS ISN'T SAFE! CAN STILL CHANGE MEMBERS OF THE SET
public MyObject[] MyObjects{ get; protected set; }
}
Дочерний класс этого уже реализует один индексатор для другой цели, поэтому я не могу использовать его для возврата MyObject.
Однако, поскольку возвращать массив небезопасно/плохая практика, поскольку это означает, что элементы внутри могут быть изменен, я ищу способ, которым я могу предоставить аккуратный интерфейс для доступа к одному элементу, например.
MyObject = Child.MyObjects[i];
но без предоставления set
доступа к любому элементу MyObjects.
У меня есть связанный с этим вопрос: если у меня есть индексатор в родительском классе, можно ли его использовать, когда у вас есть объект дочернего класса?
Редактировать:
Я решил использовать этот методpublic MyObject MyObject(int index) { return MyObjects[index]; }
, так как он больше всего соответствует тому, что я хотел.
MyObject
все равно можно редактировать. Если это проблема, вы можете сделать что-то, чтобы выставлять только клоны объектов, или изменитьMyObject
сclass
наstruct
. - person Tim S.   schedule 15.06.2012IEnumerable<MyObject>
, чтобы разрешить итерацию таким образом. ПосколькуIEnumerable
указывает только доступ для чтения, вам не нужно раскрывать какие-либо установленные возможности. - person Tim S.   schedule 15.06.2012