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

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

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

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

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

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

Пепел Феникса
То есть, если я напишу свойство таким вот образом:
Код:
public int[] Data // уже в заголовке тип данных является массивом
{
	private set
	{
		data=value;
	}
	get
	{
		return data;
	}
}
То обращение вида
Код:
myclass.Data[i] = 258; // что нибудь
будет допустимо ?

А обращение вида "myclass.Data=new int[258];" - будет запрещено ?
И всё равно, тип свойства - массив, а не число. А мне нужно число из массива.
Подпись ? Не, не слышал ...

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

да, потому что мы не присваиваем само свойство.
мы работаем с тем что вернуло свойство.
Код:
myClass.Data[i]=50;//можно
int[] data=myClass.Data;//можно.
myClass2.Data=data;//нельзя(кроме как внутри класса)
и как говорили, такое простое свойство можно сократить
Код:
public int[] Data{get;private set;}
Цитата:
А обращение вида "myclass.Data=new int[258];" - будет запрещено ?
вне класса да.
(сам класс имеет доступ к своим private членам)
Цитата:
И всё равно, тип свойства - массив, а не число. А мне нужно число из массива.
так по индексу то обратитесь.
ваш метод же не отменяет указания индекса
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

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

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
да, потому что мы не присваиваем само свойство.
мы работаем с тем что вернуло свойство.
Код:
myClass.Data[i]=50;//можно
int[] data=myClass.Data;//можно.
myClass2.Data=data;//нельзя(кроме как внутри класса)
и как говорили, такое простое свойство можно сократить
Код:
public int[] Data{get;private set;}
вне класса да.
(сам класс имеет доступ к своим private членам)
так по индексу то обратитесь.
ваш метод же не отменяет указания индекса
Указание индекса в моём понимании происходит вне свойства, то есть - ссылку на массив уже вернули. Аналогично при записи: я сначала запрашиваю ссылку, изменяю элемент по индексу (вне свойства), потом отправляю ссылку в свойство, и ссылка уже записывается в поле.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 14.09.2016, 23:21   #34
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Указание индекса в моём понимании происходит вне свойства, то есть - ссылку на массив уже вернули
а какая разница вне или внутри? результат выполнен?
Цитата:
Аналогично при записи: я сначала запрашиваю ссылку, изменяю элемент по индексу (вне свойства), потом отправляю ссылку в свойство, и ссылка уже записывается в поле.
последние два действия уберите, их нет.
у вас не копия массива, а ссылка на сам массив.

Код:
var data=myclass.Data
data[i]=data[j]
запомните уже этот код.
нет там никаких лишних присвоений, не выдумывайте.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 14.09.2016, 23:34   #35
OmegaBerkut
Спокойный псих
Участник клуба
 
Аватар для OmegaBerkut
 
Регистрация: 19.03.2013
Сообщений: 1,538
По умолчанию

Цитата:
Сообщение от Пепел Феникса
последние два действия уберите, их нет
Как же нет ??
Код свойства:
Код:
public int[] Data
{
	set
	{
		data=value; // явное присвоение, или первый знак присвоения
	}
	get
	{
		return data; // явный возврат
	}
}
Код обращения:
Код:
myclass.Data[i]=myclass.Data[j]; // второй знак присвоения
При этом, порядок действий следующий (справа налево):
1) запросить ссылку на массив data (явный возврат значения поля data);
2) извлечь значение элемента по индексу j;
3) запросить запись ссылки
4) записать извлечённое значение (п.2) в массив по запрошенной ссылке (п.3) по индексу i
5) записать ссылку в свойстве
Подпись ? Не, не слышал ...

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

Цитата:
Как же нет ??
вы присваиваете элемент в массив, а не значение свойству.
Цитата:
/ явное присвоение, или первый знак присвоения
а где вызов этого сеттера?
у нас есть присвоение в int[], а не в myClass.Data.
Цитата:
1) запросить ссылку на массив data (явный возврат значения поля data);
2) извлечь значение элемента по индексу j;
3) запросить запись ссылки
4) записать извлечённое значение (п.2) в массив по индексу i
3 пункта нету.
мы не запршиваем запись. у нас уже есть массив из п1, с ним и идет общем, откуда он пришел, не важно.
Код:
var data=myclass.Data
data[i]=data[j]
повторю 3-4 ый раз этот код.
где тут замена массива?

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

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

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

Код:
class MyClass
{
  int[] _data=new int[]{1,2,3};
  public int[] Data{get{return _data;}}
}
var myClass=new MyClass();
myClass.Data[0]=5;
это будет работать.
а по вашим фантазиями не должно.
-----------------------------------------------------------------
5 пункта нет.
вы где видите присвоение этому свойству?
Код:
myClass.Data=new int[0];//вот это вызов сеттера, присвоение самому свойству.
прочитайте уже код, что я написал.
разве от того что вы напишете метод, он вдруг вызовется сам по себе?
Цитата:
Две операции присвоения, явно указанные в коде в виде двух знаков равно.
повторю вопрос, где в выражении два знака равно?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

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

Цитата:
Сообщение от Пепел Феникса
а по вашим фантазиями не должно.
Оно будет работать, только при этом я не запрашиваю элемент из массива, а запихиваю туда литерал/переменную/константу. И запись происходит в массив (в часть массива по индексу) по ссылке на этот массив.
Подпись ? Не, не слышал ...
OmegaBerkut вне форума Ответить с цитированием
Старый 15.09.2016, 00:01   #40
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от OmegaBerkut Посмотреть сообщение
Оно будет работать, только при этом я не запрашиваю элемент из массива, а запихиваю туда литерал/переменную/константу. И запись происходит в массив по ссылке.
пфф.
Код:
myClass.Data[0]=myClass.Data[1];
тоже будет работать.
Цитата:
И запись происходит в массив (в часть массива по индексу) по ссылке на этот массив
.ну так она и в том случае так же будет работать, в честь чего должно что-то меняться?
меняется факт откуда берется rvalue(значение справа от =)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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