![]() |
|
Модераторы: diadiavova, gambit |
![]()
|
|
| diadiavova |
|
||||||||||||||||||||||||||||||||||||||||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В этом топике постараюсь изложить перевод документации, по новым возможностям языка. Переводчик с меня тот ещё, так что любые замечания и исправления приветствуются. На момент написания этих строк перевёл часть, которую сейчас и опубликую. В дальнейшем, по мере продвижения буду редактировать этот пост и добавлять новый материал.
Источник находится здесь http://msdn.microsoft.com/en-us/library/we...8VS.100%29.aspx И далее по ссылкам Новые возможности языка Visual Basic 10 Автореализованные свойства Автореализованные свойства позволяют Вам быстро определить свойство класса, без необходимости писать код получения и присвоения значения свойства. Когда Вы пишете код для автореализованного свойства, компилятор Visual Basic автоматически создает Private поле, для хранения значения свойства в дополнение к созданию связанных процедур Get и Set. С автореализованными свойствами свойство, включая значение по умолчанию, может быть объявлено в одну строку. Следующий пример показывает три объявления свойства.
Автореализованное свойство эквивалентно свойству, для которого значение свойства размещено в Private поле. Следующий пример кода показывает автореализованное свойство.
Поле поддержки (Backing Field) Когда Вы объявляете автореализованное свойство, Visual Basic автоматически создает скрытое Private поле, называемое полем поддержки(Backing Field), для хранения значения свойства. Имя поля поддержки формируется из имени автореализованного свойства, которому предшествует символ подчеркивания (_). Например, если Вы объявляете автореализованное свойство с именем ID, поле поддержки называют _ID. Если Вы включаете в свой класс элемент, который также имеет имя _ID, Вы создаете конфликт имён, и Visual Basic сообщает об ошибке компилятора. Поле поддержки также имеет следующие характеристики:
Инициализация Автореализованного Свойства Любое выражение, которое может использоваться для инициализации поля, допустимо для того, чтобы инициализировать автореализованное свойство. Когда Вы инициализируете автореализованное свойство, выражение оценивается и передаётся к процедуре Set свойства. Следующие примеры кода показывают некоторые автореализованные свойства, которые включают начальные значения.
Вы не можете инициализировать автореализованное свойство, которое является элементом Интерфейса, или тем, который отмечен MustOverride. Когда Вы объявляете автореализованное свойство как элемент Структуры, Вы можете только инициализировать автореализованное свойство, если оно отмечено как Shared. Когда Вы объявляете автореализованное свойство как массив, Вы не можете определить явные границы массива. Однако, Вы можете предоставить значение, используя инициализатор массива, как показано в следующих примерах.
Определения Свойства, Требующие Стандартного Синтаксиса Автореализованные свойства удобны и поддерживают много сценариев программирования. Однако, есть ситуации, в которых Вы не можете использовать автореализованное свойство и должны вместо этого использовать стандарт, или расширенный, синтаксис свойства. Вы должны использовать расширенный синтаксис определения свойства, если Вы хотите выполнить одно из следующих действий:
Расширение Автореализованного Свойства Если Вам нужно конвертировать автореализованное свойство в расширенное, которое содержит процедуру Get или Set, Редактор кода Visual Basic может автоматически сгенерировать процедуры Get и Set и оператор End Property для свойства. Код сгенерирован, если Вы разместите курсор на пустой строке после оператора Property,напечатаете G (для, Get) или S (для Set), и нажмёте ENTER. Редактор кода Visual Basic автоматически сгенерирует процедуру Get или Set для WriteOnly и ReadOnly свойств, когда Вы нажмёте ENTER в конце оператора Property. Инициализаторы коллекций Инициализаторы коллекции предоставляют сокращенный синтаксис, который позволяет Вам создать коллекцию и заполнить её с начальным набором значений. Инициализаторы коллекции полезны, когда Вы создаете коллекцию из ряда известных значений, например, списка опций меню или категорий, начальный набор числовых значений, статического списка строк, например, имен дня или месяца, или географических местоположений, например, списка состояний, которые используются для проверки правильности. Для идентификации инициализатора коллекции, используется ключевое слово From, за которым следуют фигурные скобки ({}). Это похоже на синтаксис литерала массива, который описан в Массивах в Visual Basic. Следующие примеры показывают различные способы использовать инициализаторы коллекции, чтобы создать коллекции.
Синтаксис Инициализатор коллекции состоит из разделённого запятыми списка значений, заключённого в фигурные скобы ({}), которым предшествует ключевоге слово From, как показано в следующем примере.
Когда Вы создаете коллекцию, например, List (Of T) или Dictionary (Of TKey, TValue), Вы должны указатьть тип коллекции перед инициализатором коллекции, как показано в следующем коде.
Инициализаторы коллекции не могут использоваться совместно с инициализаторами объекта. Создание Коллекции, с использованием инициализатора коллекций Когда Вы создаете коллекцию, используя инициализатор коллекции, каждое значение, которое предоставлено в инициализаторе коллекции, передаётся соответствующему методу Add коллекции. Например, если Вы создаете List(Of T), используя инициализатор коллекции, каждое строковое значение в инициализаторе коллекции передаётся методу Add. Если Вы хотите создать коллекцию, используя инициализатор коллекции, указанный тип должен быть допустимым типом коллекции. Примеры допустимых типов коллекции включают классы, которые реализуют IEnumerable (Of T) интерфейс или наследуют класс CollectionBase. Указанный тип должен также предоставить метод Add, который отвечает следующим критериям.
Например, следующий пример кода показывает, как создать коллекцию List(Of Customer), используя инициализатор коллекции. Когда код выполнен, каждый объект Customer передан методу Add (Customer) универсального списка.
Следующий пример кода показывает эквивалентный код, который не использует инициализатор коллекции.
Если у коллекции есть метод Add с параметрами, соответствующими конструктору объекта Customer, Вы можете вложить значения параметра метода Add в инициализатор коллекции, как описано в следующем разделе. Если у коллекции нет такого метода Add, Вы можете создать его, как метод расширения. Примера того, как создать метод Add как метод расширения для коллекции, см. Методы расширения (Visual Basic), Используемый Инициализатором Коллекции. Примера того, как создать пользовательскую коллекцию, которая может использоваться с инициализатором коллекции, см. How to: Create a Collection Used by a Collection Initializer. Вложение Инициализаторов Коллекции Вы можете вкладывать значения в пределах инициализатора коллекции, чтобы идентифицировать специфичную перегрузку метода Add для коллекции, которая создается. Значения, переданные к методу Add, должны быть отделены запятыми и заключены в фигурные скобки ({}), как Вы сделали бы в литерале массива или инициализаторе коллекции. Когда Вы создаете коллекцию, используя вложенные значения, каждый элемент вложенного списка значения передается в качестве параметра методу Add, который соответствует типам элемента. Например, следующий пример кода создает Dictionary(Of TKey, TValue), в котором ключи имеют тип Integer, и значения имеют тип String. Каждому из вложенных списков значения соответствуют метод Dicnionary.Add.
Только вложенные значения списков первого уровня вложения передаются методу Add коллекции. Более глубокие уровни вложения обрабатываются как литералы массива, и вложенным спискам значения не соответствуют метод Add никакой коллекции. Неявное Продолжение Строки Во многих случаях, неявное продолжение строки позволяет Вам продолжать оператор на следующей строке, не используя символ подчеркивания (_). Список случаев, в которых можно пропустить знак подчёркивания После запятой
После открывающей круглой скобки (() или перед закрывающей круглой скобкой ()).
После открывающей фигурной скобки ({) или перед закрывающей фигурной скобкой (}).
После открытого встроенного выражения (<% =) или перед ближайшим из встроенных выражений (%>) в пределах XML- литерала.
После оператора конкатенации строк (&)
После операторов присвоения (=, &=, :=, +=, -=, *=, /=, \=, ^=, <<=, >>=)
После бинарных операторов (+, -, /, *, Mod, <>, <, >, <=, >=, ^, >>, <<, And, AndAlso, Or, OrElse, Like, Xor) в выражениях.
После символа (.) спецификатора члена и перед именем члена. Однако, Вы должны включить символ продолжения строки (_) после символа спецификатора члена, при использовании оператора With или предоставлении значения в списке инициализации для типа. Рассмотрите разрыв строки после оператора присваивания (например, =), когда Вы используете операторы With или списки инициализации объекта.
После спецификатора свойства оси XML (. или .@ или ...). Однако, Вы должны включить символ продолжения строки (_), когда Вы определяете спецификатор элемента, когда Вы используете ключевjt слово With.
После символа «меньше чем» (<) или перед символом "больше чем" (>), при определении атрибута. Также после символа "больше чем" (>),при определении атрибута. Однако, Вы должны включить символ продолжения строки (_), когда атрибуты определяются на уровне сборки или модуля.
Перед и после операторов запроса (Aggregate, Distinct, From, Group By, Group Join, Join, Let, Order By, Select, Skip, Skip While, Take, Take While, Where, In, Into, On, Ascending, и Descending). Нельзя прерывать строку между ключевыми словами операторов запроса, которые составлены из множественных ключевых слов (Order By, Group Join, Take While и Skip While).
После ключевого слова In в операторе For Each
После ключевого слова From в инициализаторе коллекций.
Пока всё что есть -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||
| diadiavova |
|
||||||||||||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Многострочные Лямбда Выражения и Подпрограммы
Поддержка лямбда выражений была расширена, теперь поддерживаются многострочные лямбда функции и подпрограммы. Lambda Expressions Лямбда-выражение - функция или подпрограмма без имени, которое может использоваться везде, где допустим делегат. Лямбда - выражения могут быть функциями или подпрограммами и могут быть однострочными или многострочными. Вы можете передать значения лямбда–выражениям объекты, доступные в текущей области видимости. Замечание Оператор RemoveHandler - исключение. Вы не можете передать лямбда - выражение в качестве делегата параметра RemoveHandler. Лямбда–выражения создаются при помощи ключевого слова Sub или Function, так же, как и при создании стандартной функции или подпрограммы. Однако, лямбда-выражения включены в оператор. Следующий пример - лямбда-выражение, которое увеличивает собственный параметр и возвращает значение. Пример показывает и однострочный и многострочный синтаксис лямбда-выражения для функции.
Следующий пример - лямбда-выражение, которое выводит значение на консоль. Пример показывает и однострочный и многострочный синтаксис лямбда - выражения для подпрограммы.
Обратите внимание, что в предыдущих примерах лямбда-выражения назначены имени переменной. Всякий раз, когда Вы ссылаетесь на переменную, Вы вызываете лямбда-выражение. Вы можете также объявить и вызвать лямбда-выражение в то же самое время, как показано в следующем примере.
Лямбда-выражение может быть возвращено функцией (как показано в примере в разделе Контекст далее в этой теме), или передано в неё как аргумент к параметру, получающему тип делегата, как показано в следующем примере.
Синтаксис лямбда-выражений Синтаксис лямбда-выражения напоминает синтаксис стандартной функции или подпрограммы. Различия следующие:
Лямбда-выражение разделяет свой контекст с областью видимости, в пределах которой оно определено. У него есть те же самые права доступа как у любого кода, написанного в содержащей области. Это включает доступ к полям, функциям и подпрограммам, Me, и параметрам и локальным переменным в содержащей области. Доступ к локальным переменным и параметрам в содержащей области может простираться за пределы времени существования той области. Пока делегат, ссылающийся на лямбда-выражение, не доступен для сборки мусора, доступ к переменным в оригинальной среде сохранен. В следующем примере переменная target является локальной по отношению к методу makeTheGame, в котором определено лямбда-выражение playTheGame. Обратите внимание, что возвращенное лямбда-выражение, назначенное takeAGuess в Main, все еще имеет доступ к локальной переменной target.
Следующий пример демонстрирует широкий диапазон прав доступа вложенного лямбда-выражения. Когда возвращенное лямбда-выражение выполняется от Main как aDel, он обращается к этим элементам:
Преобразование в тип Delegate Лямбда-выражения могут быть явно преобразованы в совместимый тип делегата. Информацию об основных требованиях совместимости смотрите здесь Relaxed Delegate Conversion. Например: следующий пример кода показывает лямбда-выражение, которое явно конвертируется в Func(Of Integer, Boolean) или в делегат с соответствующей сигнатурой.
Когда вы присваиваете лямбда-выражения делегатам, или передаёте их процедурам в качестве аргументов вы можете указать имена параметров, но опустить типы данных, позволив типам быть выведенными из делегата. Примеры
Типа продолжение следует... Это сообщение отредактировал(а) diadiavova - 27.9.2009, 18:59 -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||||||||||||||
|
|||||||||||||||||||
| diadiavova |
|
||||||||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
Новая опция командной строки, указывающая версию языка.
/langversion
Аргументы версия Обязательный. Версия языка, используемая во время компиляции. Принимаемы значения 9, 9.0, 10, и 10.0 Замечания Опция /langversion указывает какой синтаксис принимается компилятором. Например, если указать версию 9.0, то компилятор сгенерирует ошибку для синтаксиса используемого только в версии 10.0 и более поздних. Можно установить опцию напрямую , используя командную строку. В Visual Studio IDE версия устанавливается автоматически, при выборе целевой версии .Net Framework вашего приложения. Дополнительные сведения находятся здесь Targeting a Specific .NET Framework Version or Profile. Пример
Поддержка Эквивалентности Типа (Type Equivalence Support) Теперь вы можете развёртывать приложение, со встроенной информацей о типе вместо импорта Primary Interop Assembly (PIA). Со встроенной информацией о типе Ваше приложение может использовать типы во время исполнения, не требуя ссылки на сборку. Если опубликованы различные версии сборки во время исполнения, приложение, которое содержит встроенную информацию о типе, может работать с различными версиями, без необходимости перекомпиляции. Дополнительная информация здесь /link (Visual Basic). Пример здесь Walkthrough: Embedding Types from Managed Assemblies. В общих чертах: теперь вместо того, чтобы на целевую машину таскать за собой сборки взаимодействия, компилятор будет встраивать информацию о COM-типах прямо в программу.(прим. diadiavova) Поддержка динамических языков Visual Basic сможет связываться с объектами динамических языков, таких как IronPython и IronRuby. Дополнительная информация здесь Working with Dynamic Objects (Visual Basic). Документация пока не готова, так что более подробное разьяснение, по всей видимости, пока описать не удастся. Видимо речь идёт о поддержке DLR, вот статья в буржуйской википедии Dynamic Language Runtime (прим. diadiavova) Ковариация и контрвариация Ковариация и контрвариация обеспечивают дополнительную гибкость при сравнении подписей методов с типами делегатов. Ковариация позволяет методу иметь тип возвращаемого значения, степень наследования которого больше, чем указано в делегате. Контрвариация использовать метод с типами параметров, степень наследования которых меньше, чем у типа делегата. Подразумевается неявное преобразование классов, которые реализуют различные интерфейсы, и предоставляет больше гибкости при определении соответствия сигнатурам методов с различными типами делегата. Вы можете создать различные интерфейсы и делегаты, используя новые ключевые слова In и Out..NET Framework также представляет различную поддержку нескольких существующих универсальных интерфейсов и делегатов, включая интерфейс IEnumerable(Of T) и делегаты Func((Of TResult)) и Action(Of T). Начиная с .Net Framework 4 и Visual Studio 10, оба языка C# и Visual Basic поддерживают переменные универсальные интерфейсы и делегаты и разрешают неявное преобразование параметров универсальных типов. Оба языка так же позволяют создавать собственные переменные интерфейсы и делегаты. Для иллюстрации ковариации рассмотрим интерфейс IEnumerable(Of Object). Тип String наследуется от типа Object, и в некоторых случаях Вы, возможно, хотите присвоить объекты этих интерфейсов друг к другу, как показано в следующем примере кода.
В более ранних версиях этот код привёл бы к ошибке компиляции в C# и в Visual Basic при Option Strict On. Вариация поддерживается только для ссылочных типов, тогда как значимые типы не поддерживают вариацию.Например: (IEnumerable(Of Integer) не может быть напрямую преобразован в (IEnumerable(Of Object). В предыдущем примере вы могли использовать строки вместо объектов, благодаря тому, что интерфейс IEnumerable(Of T) – ковариантен. Для иллюстрации контрвариантности, представьте себе, что у вас есть Windows Forms приложение, в котором события MouseClick и KeyDown обрабатываются одинаково. В то же время событие MouseClick использует делегат с аргументом типа MouseEventArgs, а событие KeyDown использует аргумент типа KeyEventArgs. Контрвариация позволяет создать только один обработчик, принимающий параметр типа EventArgs. Этот обработчик сможет обрабатывать оба события, потому что оба типа MouseEventArgs и KeyEventArgs произведены от типа EventArgs. Поэтому можно написать код, показанный далее
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
||||||||
|
|||||||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В связи с выходом официальной документации на русском языке, тема больше не актуальна.
http://msdn.microsoft.com/ru-ru/library/we86c8x2.aspx Отпускаю в свободное плавание -------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
| Pilger |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 257 Регистрация: 10.5.2008 Где: Германия Репутация: нет Всего: нет |
Жаль что это не актуально для ReadOnly и WriteOnly свойств. -------------------- Ein Leben nach der Schleife existiert, nur wenn die Schleife terminiert. |
|||
|
||||
| diadiavova |
|
|||
![]() Доктор Зло(диагност, настоящий, с лицензией и полномочиями) ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5821 Регистрация: 14.8.2008 Где: В Коньфпольте Репутация: 8 Всего: 142 |
В любом случае сниппеты и макросы всё ещё доступны
-------------------- Хочешь получить мудрый совет - читай подписи участников форумов. Злой доктор Щасзаболит |
|||
|
||||
![]()
|
| Правила форума VB .NET | |
|
|
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, diadiavova. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | VB .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |