Есть некоторый класс, содержащий массив с координатами в виде закрытого поля, и абстрактный класс для создания расширений:
public class Simulator
{
private Vector3[] _pos;
public abstract class Extension
{
protected Simulator Simulator { get; set; }
protected Extension(Simulator simulator)
{
Simulator = simulator;
}
...
}
...
}
Как получить быстрый и безопасный доступ к элементам массива _pos (с возможностью изменений) из расширений?
Как я понял из статьи возврат массива не является корректным выходом в данной ситуации.
Добавляем функцию (или свойство, как вам нравится) в класс-расширение
public class Simulator
{
private Vector3[] _pos;
public abstract class Extension
{
protected Simulator Simulator { get; set; }
protected Extension(Simulator simulator)
{
Simulator = simulator;
}
protected Vector3[] GetPos()
{
return Simulator?._pos;
}
}
}
Используем её в наследниках
public class Extension1 : Simulator.Extension
{
public Extension1(Simulator simulator) : base(simulator)
{
}
private void Foo()
{
var pos = GetPos();
pos[0] = new Vector3();
}
}
Если вам надо вернуть копию массива
protected Vector3[] GetPos()
{
if (Simulator?._pos == null) return null;
var copy = new Vector3[Simulator._pos.Length]
Array.Copy(Simulator._pos,copy, Simulator._pos.Length);
return copy;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости