Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> this 
V
    Опции темы
Bogdan1024
  Дата 30.5.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Что значит this в данной записи?
Код

static public bool IsEmpty(this TextBox txtBox)



--------------------
user posted image
PM MAIL   Вверх
Void
Дата 30.5.2008, 16:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Это т.н. extension methods, которые появились в C# 3.0. Такая запись определяет метод IsEmpty для объектов класса TextBox.
Соответственно, при вызове
Код
TextBox t = new TextBox();
// ...
t.IsEmpty();

txtBox примет значение t.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
vponomarov
Дата 30.5.2008, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



вот это жесть smile 
static методы уже вызываются для экземпляров класса
смысл в таких методах безусловно есть, но выглядит диковато smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
QryStaL
Дата 30.5.2008, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Intellectual feast
**


Профиль
Группа: Участник
Сообщений: 914
Регистрация: 30.11.2005

Репутация: 14
Всего: 32



Цитата(vponomarov @  30.5.2008,  17:06 Найти цитируемый пост)
static методы уже вызываются для экземпляров класса

Не совсем. Просто в статический метод передается ссылка на объект. По сути, синтаксический сахар.


--------------------
I don't need a reason being who I am...
PM MAIL ICQ   Вверх
vponomarov
Дата 30.5.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 407
Регистрация: 11.8.2007
Где: Киев

Репутация: 4
Всего: 12



QryStaL, не, я понял механизм
просто со стороны это выглядит дико (ну по крайней мере для меня)
хотя вот подумал - да, прикольный механизм smile 


--------------------
user posted image
user posted image
PM MAIL ICQ   Вверх
source777
Дата 30.5.2008, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1878
Регистрация: 12.3.2007

Репутация: 4
Всего: 56



Цитата
static методы уже вызываются для экземпляров класса

Не совсем так, точнее совсем не так. Эти методы-примеси объявляются в отдельном статическом классе, а код
Код
t.IsEmpty();

заменяется компилятором на
Код
ExtensionClass.IsEmpty(t);


И как уже правильно заметил QryStaL, это является отличны примером синтаксического сахара.


--------------------
Если бы программистам платили за то, чтобы убирать код из программы вместо того, чтобы добавлять его, программы были бы намного лучше © Николас Негропонте
PM MAIL   Вверх
Bogdan1024
Дата 5.6.2008, 14:41 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1436
Регистрация: 28.9.2005
Где: Киев

Репутация: 5
Всего: 13



Мне не нравится такая фича :( Такие фичи только прибавляют сомнения в стиле "Какая суть этого метода - родной метод или экстеншн?". Такой изврат разве есть в других языках?


--------------------
user posted image
PM MAIL   Вверх
Void
Дата 5.6.2008, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



В динамических языках есть monkey patching, который позволяет примерно то же самое. В языках с мультиметодами (CLOS) вообще нет разделения на «родные» методы и расширения.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0834 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.