C# начинает разочаровывать
с лямбда выражениями и type inference
Анонимные делегаты дают практически ту же функциональность, даже короче бывает порой.
не совсем ту, а не статических классов совсем нет
//Я в java не большой рюх, поэтому не совсем уверен, что понимаю, что такое нестатические классы. Пример будет действительно к месту.
Это ещё что. Я вот вернулся в C++ и с каждым днём всё меньше и меньше понимаю, почему кто-то не любит Java. Ведь Java - это гармония в голове и в коде. Особенно если человек пользуется правильными библиотеками и правильными методами программирования (например, применяет design patterns). А на C++... кто во что горазд... постоянно изобретают велосипеды и создают плохо читаемый код, который потом надо кому-то поддерживать.......
С умными людьми всегда готов поговорить о чём угодно. Кабинетным теоретикам просьба не беспокоиться.
Чем же это твой "design patterns" (кстати, как это будет по-русски) правилен?
---
...Я работаю антинаучным аферистом...
Сейчас работаю на Java/C# проекте. 70% времени пишу на С++, просто потому, что другие языки не позволяют решать некоторые задачи либо вообще, либо эффективно. (Кстати, memory leaks пока что были только на Java, нашёлся у нас умелец.) Хотя больше всего мне не нравится C#: самый сырой и не проработанный, даже вторая версия оставляет желать много лучшего.
Конечно-конечно. Правда даже решить такую простую задачу как перевод "design patterns" на русский язык выполнить не можешь. Про это же не написано в Ландау-Лившице...
![](/images/graemlins/smile.gif)
Про шаблоны проектирования есть минимум одна классическая работа, а сами они, по слухам, уже входят в курс обучения программированию. Так что Гугл в руки - и вперёд...
Понятно, что в основном всё зависит от конкретных людей, а не от языка. Это я так, вспоминаю замечательное время Java + Eclipse.
Какая?
> а сами они, по слухам, уже входят в курс обучения программированию.
Не входят, иначе это были бы не слухи.
> Так что Гугл в руки - и вперёд...
Это всего лишь модные слова, поэтому Гугл не будет эффективен.
---
...Я работаю антинаучным аферистом...
Ты хоть понимаешь, что практически любой действующий программер прочтёт твоё сообщение приблизительно так: "Я кабинетный теоретик. Я не в курсе современных методологий. У меня нет нормальных знакомых. Я даже гуглом пользоваться не умею. Я же КОНТРА."?
"Современная методология" <> "design patterns".
Мои знакомые, в большинстве своём, не занимаются программированием.
Отправлять в поиск по ключевым словам, которые ничего не значат,
а являются всего лишь очередным рекламным ходом, неприлично.
Ты говоришь о какой-то классической работе, но отказываешься её назвать,
ergo, этой работы не существует.
То, что ты не смог дать ссылку хотя бы на Wikipedia, тебе в минус.
---
...Я работаю антинаучным аферистом...
![](/images/graemlins/shocked.gif)
---
...Я работаю антинаучным аферистом...
Я так и подумал, вообще-то, но на всякий случай =)
Кстати, доказательством, что "design patterns" никоим боком
не относятся к современной методологии, является использование в качестве примеров плохо воспринимаемого ООП,
к тому же ещё и с жутко громоздким синтаксисом,
на месте более воспринимаемых функционалов.
По факту, в науке стараются, по возможности,
отказываться от графических методов или хотя бы
ограничивать их применение.
Примеры к "design patterns" построены иначе,
они более напоминают книжку-раскраску,
растрачивая попусту зрительное пространство.
Это в "Wikipedia", в книгах это будет выглядеть ещё хуже,
ибо кто-кто, а американцы получают гонорар за объём.
---
...Я работаю антинаучным аферистом...
C#: самый сырой и не проработанный, даже вторая версия оставляет желать много лучшего.голословный наезд
![](/images/graemlins/mad.gif)
Хотя больше всего мне не нравится C#:
а может ты просто не умеешь и не хочешь с ним обращаться?
![](/images/graemlins/wink.gif)
а может ты просто не умеешь и не хочешь с ним обращаться?Ну что не умею обращаться как "отец" - это, наверное, факт. Но трёх месяцев практики на этом языке вполне хватает, чтобы сделать какие-то выводы. Просто от балды могу вспомнить некоторые странности:
1. Uri нельзя создать по закодированной строке. Вернее, можно, но вот гемор в том, что все '\' (%5C) она РАСКОДИРУЕТ и заменит на '/'.
2. Повесить картинку на кнопку - банальная вроде бы задача. Почему-то эта картинка не нажимается вместе с кнопкой.
3. Не ясно, почему event надо проверять на null перед вызовом? Неужели, нельзя было встроить в его функциональность?
4. Некоторые классы в стандартных библиотеках названы как в Visual Basic (Dictionary, etc). Усложняет поиск решений тем людям, которые никогда не писали на этом языке, но писали на C++ или Java.
5. Windows Forms забавно работают с потоками: Invoke приходится делать через рефлекшн. Причём нет возможности запихнуть туда анонимный делегат. Или эта возможность дико нетривиальна?
причем здесь reflection? и в чем проблема с делегатами?
C#: самый сырой и не проработанный, даже вторая версия оставляет желать много лучшего.
некоторые из пунктов к язык не имеют отношения.
p.s. что ж такого в слове Dictionary от Visual Basic?
5 совсем не понялНу смотри: Invoke для произвольной функции получает аргументы в виде делегата и object[], то бишь вызывает он её через reflection? Или как ещё можно вызвать произвольную функцию?
причем здесь reflection?
не серьезные причины, чтобы делать вот таки утвержденияВ наше время язык представляет из себя не только язык, но и SDK. Стал бы кто-то писать на C#, не будь для него вполне мощного SDK? Не писать же на каждом шагу native код.
некоторые из пунктов к язык не имеют отношения.
Ты и прав, и не прав - одновременно.
Если у Вас ничего не получается -то прочтите же наконец документацию.В msdn-е для Control.Invoke русским по белому английскими буквами написано:
The delegate can be an instance of EventHandler, in which case the sender parameter will contain this control, and the event parameter will contain EventArgs.Empty. The delegate can also be an instance of MethodInvoker, or any other delegate that takes a void parameter list. A call to an EventHandler or MethodInvoker delegate will be faster than a call to another type of delegate.Можно даже залезть в код, и найти этому подтверждение:
if (entry1.method is EventHandler)
{
EventHandler) entry1.methodentry1.caller, EventArgs.Empty);
}
else if (entry1.method is MethodInvoker)
{
MethodInvoker) entry1.method;
}
else
{
entry1.retVal = entry1.method.DynamicInvoke(entry1.args);
}
Соответственно вот такой код будет работать без всякого reflection-а:
textBox.Invoke(new MethodInvoker(delegate { textBox.Text = "bla-bla"; };
![](/images/graemlins/smile.gif)
![](/images/graemlins/grin.gif)
Оставить комментарий
6yrop
почему в нем нет анонимных и не статических классов, которые уже давно есть в Java?иногда они очень удобны