-Музыка

 -Подписка по e-mail

 

 -Поиск по дневнику

Поиск сообщений в Flashr

 -Статистика

Статистика LiveInternet.ru: показано количество хитов и посетителей
Создан: 26.02.2007
Записей:
Комментариев:
Написано: 6574


Visual Studio 2010 beta

Четверг, 21 Мая 2009 г. 11:10 + в цитатник

Начиная со среды, 20 мая, все желающие могут ознакомиться с бета-версией новейшей среды разработки Visual Studio 2010 и .NET Framrwork 4.0. Вся информация о способах загрузки находится на этой странице.
Развернутое описание об изменениях в целом, а не только в csharp, можно найти тут, а не тот голимый отчет, что был выложен кем-то на хабре ради кармы.
Меня больше всего заинтересовало пока расширение UML возможностей для рисования схем и логик (всегда мечтал рисовать, а не кодить), а также новый модификатор переменных dynamic. Он нужен при работе с объектами, которые подгружаются как DLR (Dynamic Language Runtime). Например, если Вы подгрузили библиотеку и хотите вызвать какую-то ее функцию или работаете с OfficeAPI, то теперь ваш код будет гораздо короче. Вот пример кода вызывающего функцию объекта неизвестного типа, как это было еще в c#2.0:

Copy Source | Copy HTML
  1. public static void MyMethod<T>(T item)
  2. {
  3.     var getMethod = typeof(T).GetMethod("MyMethod");
  4.     if (getMethod == null)
  5.         throw new InvalidOperationException();
  6.     getMethod.Invoke(item, new object[0]);
  7. }

Теперь же с новым модификатором dynamic можно просто писать:

Copy Source | Copy HTML
  1. public static void MyMethod<T>(T item)
  2. {
  3.     dynamic di = item;
  4.     di.MyMethod();
  5. }

В первоисточнике также говориться, что если посмотреть рефлекшен, то в нем MSVS2010 запишет следующий код, который достаточно похож на старый вариант:

Copy Source | Copy HTML
  1. public static void MyMethod<T>(T item)
  2. {
  3.     object di = item;
  4.     if (<MyMethod>o__SiteContainer0<T>.<>p__Site1 == null)
  5.     {
  6.         <MyMethod>o__SiteContainer0<T>.<>p__Site1 = CallSite<Action<CallSite, object>>.Create(new CSharpCallPayload(RuntimeBinder.GetInstance(), false, false, "MyMethod", typeof(object), null));
  7.     }
  8.     <MyMethod>o__SiteContainer0<T>.<>p__Site1.Target<MyMethod>o__SiteContainer0<T>.<>p__Site1, di);
  9. }
Метки:  

 

Добавить комментарий:
Текст комментария: смайлики

Проверка орфографии: (найти ошибки)

Прикрепить картинку:

 Переводить URL в ссылку
 Подписаться на комментарии
 Подписать картинку