Быстрый доступ к закрытому массиву

215
07 февраля 2018, 10:11

Есть некоторый класс, содержащий массив с координатами в виде закрытого поля, и абстрактный класс для создания расширений:

public class Simulator
{
    private Vector3[] _pos;
    public abstract class Extension
    {
        protected Simulator Simulator { get; set; }
        protected Extension(Simulator simulator)
        {
            Simulator = simulator;
        }
        ...
    }
    ...
}

Как получить быстрый и безопасный доступ к элементам массива _pos (с возможностью изменений) из расширений?

Как я понял из статьи возврат массива не является корректным выходом в данной ситуации.

Answer 1

Добавляем функцию (или свойство, как вам нравится) в класс-расширение

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;
        }
READ ALSO
Как можно время на сервере сделать локальным?

Как можно время на сервере сделать локальным?

Раньше у меня хостинг бы в Москве, в моей временной зоне, и сайт работал как ожидалосьСейчас переезжаем на новый хостинг (SmarterAsp, Shared) у которого...

206
Реализация WCF контрактов

Реализация WCF контрактов

ЗдравствуйтеПару дней уже не могу решить проблему

213
Как в ASP.NET Core AngularJS в компонентах работать с sessionStorage?

Как в ASP.NET Core AngularJS в компонентах работать с sessionStorage?

Когда я пытаюсь добавить или прочитать значение в sessionStorage у меня вылезает ошибка "NodeInvocationException: sessionStorage is not defined ReferenceError: sessionStorage is not defined...

264
создание new Random() - утечка памяти?

создание new Random() - утечка памяти?

нужно написать генератор произвольных символов

175