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

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

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

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

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

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

Ну да ладно, либо костылями махаться, либо методами. Остальное - это уже усложнение "в глубину"
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 22:23   #22
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

Пепел Феникса
Я не говорил, что не буду давать доступ ко всему массиву. Просто я вижу неоднозначность. Но, как говорится, то что видит один, и не видят остальные, значит этот один - псих.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 22:28   #24
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

какая не однозначность?
код однозначен, доступ к элементу массива, не более.
я вам специально расписал код с временной переменной.(можно расписать еще чуть подробнее)

массивы передаются по ссылке, всегда.
если вы изучали С++, забудьте это.
тут всегда, class - ссылка, struct - значение.

обратившись к индексатору, присвоение будет в него, а не в объект источник.
выражение data[i], а не data.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
выражение data[i], а не data.
В свойстве доступа пишется
Код:
get { return data;} set { data=value; }
То есть ссылка на весь массив.
Моё понимание инкапсуляции и распределения доступа диктует, что правильнее писать
Код:
get { return data[index]; } set { data[index]=value; }
Но вот беда: у свойств нет дополнительных параметров, поэтому index передать не получится. Это лишь вопрос восприятия, не более.

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

у меня сейчас мелькнула мысль, что вы думаете что присвоений будет несколько.
myClass.Data[i]=myClass.Data[j]
так вот, тут не будет несколько присвоений, у нас один знак равенства.
lvalue берется целиком, rvalue тоже
не будет такого:
Код:
myClass=myClass
myClass.Data=myClass.Data
myClass.Data[i]=myClass.Data[j]
нет, будет выполнено ровно то что написано.
неявных пересозданий массива тоже нету. язык однозначен тут.
Цитата:
Моё понимание инкапсуляции и распределения доступа диктует, что правильнее писать
инкапсуляция, это не "не приведи Паскаль они узнают что это массив!", а это "им не нужен этот массив, значит не нужен доступ к нему".
вы хотите открыть доступ к массиву, откройте его.
инкапсуляция - это не усложнение доступа, а ограничение.
но в данном случае вы сами хотите дать доступ к массиву.

я сразу ведь сказал:
Цитата:
инкапсуляция это хорошо, но перегибать тоже не стоит.
Цитата:
Это лишь вопрос восприятия, не более.
это уже пошел вопрос понимания термина.
Цитата:
То есть ссылка на весь массив.
и в чем проблема то?
с ней все равно ничего страшного сделать нельзя.
вы своим GetData даете ровно такой же доступ, как эта ссылка.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

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

Что существует в синтаксисе: индексатор класса и свойство; чего не существует - именованный индексатор, или же "индексатор свойства", который можно так же назвать "свойство с доп. параметрами". Но его нет.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 22:40   #28
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну да, нет. Сказали ж это еще в начале темы. Зато куча других вещей есть.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 14.09.2016, 22:43   #29
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Пепел Феникса
Я вижу два присвоения:
1 - присвоение в массив по ссылке (которую вернуло свойство, происходит вне свойства)
2 - присвоение ссылки внутри свойства set.

Первый знак присвоения: myclass.Data[i] = myclass.Data[j];
Второй знак присвоения (внутри свойства Data): set { data = value; }
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 22:43   #30
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Что существует в синтаксисе: индексатор класса и свойство; чего не существует - именованный индексатор, или же "индексатор свойства", который можно так же назвать "свойство с доп. параметрами". Но его нет.
это сделано для чистоты синтаксиса.
выражение myClass.Data, это всегда обращение к свойству.
Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Пепел Феникса
Я вижу два присвоения:
1 - присвоение в массив по ссылке (которую вернуло свойство, происходит вне свойства)
2 - присвоение ссылки внутри свойства set.

Первый знак присвоения: myclass.Data[i]=myclass.Data[j];
Второй знак присвоения (внутри свойства Data) set { data=value; }
где вы увидели вызов set?
у нас нет myClass.Data=
вызов set будет только при присвоении значения именно этому свойству,
Код:
myClass.Data=myClass2.Data
.
если вам нужно запретить возможную подмену массива, делайте просто
Код:
public int[] Data{get;private set;}
и все, вне класса присвоить самому свойству ничего нельзя.(но не значения внутри объекта свойства)

прочитайте еще раз это.
Код:
var data=myclass.Data
data[i]=data[j]
разве тут есть присвоение свойству Data?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 14.09.2016 в 22:51.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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