Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2016, 12:17   #1
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию как создавать именованные индексаторы для класса

Дабы не создавать новую тему, кину вопрос сюда: как создавать именованные индексаторы для класса ?
Допустим, у меня в классе присутствует два private массива, и доступ извне класса к каждому массиву необходимо (желательно) обеспечивать через индекс.
Что я уже знаю ...
У классов может быть индексатор вида
Код:
public string this[int index]
{

}
И существуют свойства классов вида
Код:
public string Data
{
	set {}
	get {}
}
Свойства (они вроде так называются) обеспечивают возможность ограниченного доступа к полям класса, или обеспечивают возможность задания собственной логики изменения полей класса.

Вопрос в чём: можно ли, и если да, то как можно создать индексатор для свойства ?
Или же просто именованный индексатор, где вместо this указывается имя этого индексатора ?
P. S. Где то я уже видел подобную конструкцию.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 12:21   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Никак.

Только просто возвращать объекты другого класса (коллекции) со своими индексаторами.

http://stackoverflow.com/a/431345/964478
http://stackoverflow.com/a/2806990/964478
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 14.09.2016 в 12:24.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2016, 12:25   #3
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Очень интересно ...
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Дабы не создавать новую тему
Alex11223
Спасибо за детальный ответ со ссылками.
В любом случае, методы ещё никто не отменял.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 12:50   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

массив итак уже вполне себе индексируемое хранилище.
чего именно хотите достичь?
Цитата:
В любом случае, методы ещё никто не отменял.
не так удобно
посмотрите на XmlDocument например.(да и компоненты многие)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.09.2016 в 12:52.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2016, 13:10   #5
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса
Вы читаете текст ?
Цитата:
Сообщение от OmegaBerkut
у меня в классе присутствует два private массива
Конкретной цели сейчас нет. Это я занимаюсь саморазвитием.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 13:25   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

и что свойства отменили?

по гайдлайнам, в принципе поля не стоит выставлять наружу.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2016, 13:31   #7
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
и что свойства отменили?

по гайдлайнам, в принципе поля не стоит выставлять наружу.
Со свойствами, как я уже понял, не получится явно индексировать два private массива, находящихся в одном классе.
Если использовать просто свойство, которое будет возвращать весь массив, а индексирование только после возврата - то это как то не понятно ... Правильно, но куда правильнее было бы вытащить элемент из private массива не возвращая весь массив, а вернуть только запрашиваемый элемент. Это получится сделать только методом.
Подпись ? Не, не слышал ...

Последний раз редактировалось OmegaBerkut; 14.09.2016 в 13:36.
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 13:32   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если надо разрешить их менять, то делаем так:
Код:
int[] _data;
public int[] Data
{
  get{return _data;}
}
доступ к массиву получить можно, заменить целиком нет.

если же нужен ReadOnly доступ, делаем так:
Код:
int[] _data;
public ReadOnlyCollection<int> Data
{
  get{return Array.AsReadOnly(_data);}
}
если же нужен доступ с редактирование, но уведомлениями, то сделайте свою обертку.
это будет что типа того
Код:
int[] _data;
public MyDataCollection Data
{
  get{return new MyDataCollection(this);}
}
естественно все объекты можно кэшировать, а не создавать каждый раз.


Цитата:
Это получится сделать только методом.
как же Listbox работает?
или же Dictionary.
Цитата:
Со свойствами, как я уже сказал, не получится явно индексировать два private массива, находящихся в одном классе.
я разве сказал индексатор?(и я отлично знаю что может быть лишь один индексатор на тип индекса)
Цитата:
Если использовать просто свойство, которое будет возвращать весь массив, а индексирование только после возврата - то это как то не понятно ... Правильно, но куда правильнее будет вытащить элемент из private массива не возвращая весь массив, а вернуть только запрашиваемый элемент.
если что массивы не копируются при этом.
Цитата:
Дабы не создавать новую тему
правильнее создавать темы по отдельным вопросам, легче искать потом будет
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.09.2016 в 13:40.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2016, 15:16   #9
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

Цитата:
по гайдлайнам, в принципе поля не стоит выставлять наружу.
сейчас куда не плюнь всюду достаточно
{ get; set; } и привет ))
come-on вне форума Ответить с цитированием
Старый 14.09.2016, 15:32   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я знаю, даже с инициализаторами вопрос решили.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Wordpress, как создавать отдельные рубрики для страниц? AlienNation WordPress и другие CMS 0 09.10.2012 11:42
Именованные таблицы DiemonStar Microsoft Office Excel 4 02.10.2012 18:02
Операции класса, индексаторы Rectangle 6666 Общие вопросы .NET 4 08.05.2012 11:31
Именованные ячейки Foxx Microsoft Office Excel 1 20.02.2012 00:33
Как в Delphi создавать и использовать скины для програм SeRhy Помощь студентам 3 20.12.2007 20:59