Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Передача объекта или адреса?


Автор: cg_ck 22.9.2007, 18:56
Код

Size s = new Size(1,1);
Button b = new Button();
b.Size = s;
s.Width+=1;

Вопрос следующий: Видимо в моём примере в b.Size передалась копия объекта. И при изменении s.Width в b.Size.Width ничего не изменилось. Это потому, что Size - структура? Есть возможность что бы s передалось как адрес, а не как новый объект?

Автор: Alek86 23.9.2007, 11:15
думаю, это произошло потому, что в свойстве Size у Button не "забирается" адрес s, а лишь копируется его Width и Heigth.
Делается это потому, что при изменении размеров кнопки нужно еще пересчитывать множество параметров (Right, Bottom и т.д.)

ЗЫ. Это догадки. Узнать как оно взаправду делается - нужны исходники кнопки

Автор: zaver 23.9.2007, 12:32
потому что Size - это структура, а структуры передаются по значению, а не по ссылке.

Автор: archeg 23.9.2007, 13:07
Цитата(cg_ck @  22.9.2007,  18:56 Найти цитируемый пост)
Вопрос следующий: Видимо в моём примере в b.Size передалась копия объекта. И при изменении s.Width в b.Size.Width ничего не изменилось. Это потому, что Size - структура? Есть возможность что бы s передалось как адрес, а не как новый объект

Да, потому что Size - структура. Напрямую структры нельзя никак переписать по адресу - таким образом ты можешь нарушить контекст выполнения (ведь структуры хранятся в стеке).
Код

class SizeHandler
{
   public Size Value;
}
...
 SizeHandler s1 = new SizeHandler();
 SizeHandler s2 = s1;
 s2.Value = new Size(50,50);

Изменяя обертку-класс s2 ты изменяешь и s1 - так как класс - ссылочный тип

Понятно что не создавая свою кнопку ты не присобачишь в нее класс-обертку. Проще перебрать по циклу кнопочки

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)