VB: Как сделать неизменяемый массив?
От: ZAMUNDA Земля для жалоб и предложений
Дата: 19.09.10 19:50
Оценка:
Задача: У класса надо сделать свойство-массив, да так чтоб никто и никогда извне не мог ни сам массив, ни значения его элементов поменять. Внутри класса тоже менять массив не надо.

Мой котелок родил только ObjectModel.ReadOnlyCollection пользовать, но в священном писании написано что ObjectModel для создания библиотек придумано, а у меня ж просто класс внутренний. Сдаётся мне что я на белазе ведро глины пытаюсь перевезти (если вы меня понимаете). Мож есть какое-нить менее ресурсоёмкое решение.

PS: про свойства классов-элементов, я знаю, если никто не сможет эземпляр класса затереть уже хороошо.
Наука изощряет ум; ученье вострит память.
(c) Козьма Прутков
Re: VB: Как сделать неизменяемый массив?
От: Lloyd Россия  
Дата: 19.09.10 22:01
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Задача: У класса надо сделать свойство-массив, да так чтоб никто и никогда извне не мог ни сам массив, ни значения его элементов поменять. Внутри класса тоже менять массив не надо.


Какого типа операции нужны снаружи?
Re: VB: Как сделать неизменяемый массив?
От: hardcase Пират http://nemerle.org
Дата: 19.09.10 22:18
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Задача: У класса надо сделать свойство-массив, да так чтоб никто и никогда извне не мог ни сам массив, ни значения его элементов поменять. Внутри класса тоже менять массив не надо.


Индексатор?
private int[] array;
public int this[int index] {
  get { return array[index]; }
}
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: VB: Как сделать неизменяемый массив?
От: hardcase Пират http://nemerle.org
Дата: 20.09.10 06:37
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, ZAMUNDA, Вы писали:


ZAM>>Задача: У класса надо сделать свойство-массив, да так чтоб никто и никогда извне не мог ни сам массив, ни значения его элементов поменять. Внутри класса тоже менять массив не надо.


H>Индексатор?

H>
H>private int[] array;
H>public int this[int index] {
H>  get { return array[index]; }
H>}
H>



Упс, тема-то про VB.NET:
        Private array As String()
        Default Public Property Item(ByVal index As Integer) As String 
            Get 
                Return array(index)
            End Get 
            Set(ByVal value As String) 
                array(index) = value
            End Set
        End Property
/* иЗвиНите зА неРовнЫй поЧерК */
Re: VB: Как сделать неизменяемый массив?
От: elmal  
Дата: 20.09.10 06:49
Оценка:
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Мой котелок родил только ObjectModel.ReadOnlyCollection пользовать, но в священном писании написано что ObjectModel для создания библиотек придумано, а у меня ж просто класс внутренний. Сдаётся мне что я на белазе ведро глины пытаюсь перевезти (если вы меня понимаете). Мож есть какое-нить менее ресурсоёмкое решение.

Чет не понимаю в чем проблема. Заврапить обычный массив, только и всего. То есть создать враппер ImmutableArray, конструктор которого будет принимать массив (или коллекцию — что угодно), и у этого враппера будет определен только метод получения элемента. Почему это не вариант?
Re[2]: VB: Как сделать неизменяемый массив?
От: Пельмешко Россия blog
Дата: 20.09.10 08:00
Оценка: +1
Здравствуйте, elmal, Вы писали:

E>Здравствуйте, ZAMUNDA, Вы писали:


ZAM>>Мой котелок родил только ObjectModel.ReadOnlyCollection пользовать, но в священном писании написано что ObjectModel для создания библиотек придумано, а у меня ж просто класс внутренний. Сдаётся мне что я на белазе ведро глины пытаюсь перевезти (если вы меня понимаете). Мож есть какое-нить менее ресурсоёмкое решение.

E>Чет не понимаю в чем проблема. Заврапить обычный массив, только и всего. То есть создать враппер ImmutableArray, конструктор которого будет принимать массив (или коллекцию — что угодно), и у этого враппера будет определен только метод получения элемента. Почему это не вариант?

Не нужно никаких велосипедов, есть класс System.Collections.ObjectModel.ReadOnlyCollection, который успешно врапает любой IList<T>, включая обычные массивы (есть ещё и метод Array.AsReadOnly).
Re: VB: Как сделать неизменяемый массив?
От: Мишень-сан  
Дата: 20.09.10 08:08
Оценка: +1
Здравствуйте, ZAMUNDA, Вы писали:

ZAM>Задача: У класса надо сделать свойство-массив, да так чтоб никто и никогда извне не мог ни сам массив, ни значения его элементов поменять. Внутри класса тоже менять массив не надо.


ZAM>Мой котелок родил только ObjectModel.ReadOnlyCollection пользовать, но в священном писании написано что ObjectModel для создания библиотек придумано, а у меня ж просто класс внутренний. Сдаётся мне что я на белазе ведро глины пытаюсь перевезти (если вы меня понимаете). Мож есть какое-нить менее ресурсоёмкое решение.


ZAM>PS: про свойства классов-элементов, я знаю, если никто не сможет эземпляр класса затереть уже хороошо.


В VB вроде есть именованные индексеры ( будут obj.MyArray[i] на C#). Оставляешь только геттер — и получаешь иммутабельный массив.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.