Здравствуйте, VladD2, Вы писали:
VD>1. Статический конструктор вызывается при первом обращении к типу. Его даже создавать не нужно. Любая попытка обратиться е его членам приведет к его вызову. В том числе и попытка создать экземпляр этого типат (обратиться к конструктору). VD>2. Статический конструктор вызывается ровно один раз. Так что времени он практически не отнимает.
S>>И обратите внимание, что класс EventArgs не содержит инстанс-полей, т.е. под новый объект этого типа новая память НЕ нужна.
VD>3. Любой объект созданный в куче занимает как минимум 8 байт (для 32-битной платформы). 4 байта занимает ссылка на описание тиа и еще 4 специальное поле для хранения индекса объекта синхронизации. К тому же дело не в памяти. 8 байт — это ничто по сравнению с 8 метрами которые дотнет отводит по умолчанию для процесса. Их никто и не заметит. Но создание объекта — это еще куча действий такик как выделение памяти в куче, инициализация объекта (тех самых полей) и т.п. Операция эта довольно быстра но все же значительно медленее чем копирование ссылки. VD>4. Обращение к EventArgs.Empty — это всего лишь копирование ссылки. Быстрее нее может быть только копирование вэлью-типа небольшого размера.
Граждане! Вы меня нифига не поняли! Я всего лишь написал, что ПЕРВОЕ обращение к EventArgs.Empty ничем не отличается от new EventArgs(); Вы чего — с этим не согласны?
> 3. Любой объект созданный в куче занимает как минимум 8 байт
Это служебная информация, я же говорил о полях принадлежащих классу. Замечаете разницу?
Здравствуйте, TK, Вы писали:
TK>Hello, "Smarty" >> И обратите внимание, что класс EventArgs не содержит инстанс-полей, >> т.е. под новый объект этого типа новая память НЕ нужна.
TK>Странные у тебя расклады... Объект есть, а память не нужна?
Ну если ты еще напишешь под что(и сколько) нужно ему памяти, будет вообще все как у взрослых...
Здравствуйте, mihailik, Вы писали:
M>(2) Предложение вообще не несёт смысловой нагрузки.
Вот тут, пожалуй, соглашусь 100%. "Ссылки представляют собой объекты(?)" — это как бы некошерно... Все ж таки мухи не могут быть котлетами, хотя и летают где-то рядом.
Здравствуйте, Smarty, Вы писали:
VD>>4. Обращение к EventArgs.Empty — это всего лишь копирование ссылки. Быстрее нее может быть только копирование вэлью-типа небольшого размера.
S>Граждане! Вы меня нифига не поняли! Я всего лишь написал, что ПЕРВОЕ обращение к EventArgs.Empty ничем не отличается от new EventArgs(); Вы чего — с этим не согласны?
Отличается. Нужно еще к статической переменной обратиться, а это дополнительная инструкция
Здравствуйте, Mika Soukhov, Вы писали:
MS>Здравствуйте, Smarty, Вы писали:
VD>>>4. Обращение к EventArgs.Empty — это всего лишь копирование ссылки. Быстрее нее может быть только копирование вэлью-типа небольшого размера.
S>>Граждане! Вы меня нифига не поняли! Я всего лишь написал, что ПЕРВОЕ обращение к EventArgs.Empty ничем не отличается от new EventArgs(); Вы чего — с этим не согласны?
MS>Отличается. Нужно еще к статической переменной обратиться, а это дополнительная инструкция
В обоих случаях идет такое обращение. В чем разница?
Здравствуйте, _FRED_, Вы писали:
_FR>Здравствуйте, Mika Soukhov, Вы писали:
MS>>>Редактор схалявил, а статья нормальная. MS>>Что-то я не понял. А что здесь смешного?
_FR>Ты перевёл обсуждение в неожиданном, для меня например, направлении, очень быстро отыскав "всегда виноватого"
Раз он всегда виноват, то почему бы ему не быть и на этот раз виноватым?
Хорошая статья! Я, как новичек, по этой статье разобрался в делегатах и событиях. Сейчас читаю Эндрю Троэлсен "C# и платформа .NET" и обратился к статье именно из-за отсутствия полной ясности написанного в данной книге по делегатам и событиям. Замечательный язык и правильно подобраные примеры. Спасибо! Особенно радует, когда авторы статей и книг не просто описывают сложившиеся методики, но и хронологию развития и мотивы, породившие эти методики.
Респект.