Программирование >>  C# visual basicc# 

1 ... 6 7 8 [ 9 ] 10


Visual Basic поддерживает другой синтаксис. Событие объявляется ключевым словом Event - точно так же, как и в C# и C++/CLI. Однако событие возбуждается оператором RaiseEvent. Оператор RaiseEvent проверяет, инициализирована ли подписчиком переменная события. Для регистрации обработчика служит оператор AddHandler, имеющий ту же функциональность, что и операция += в C#. AddHandler требует двух параметров: первый определяет событие, а второй - адрес обработчика. Оператор RemoveHandler используется для отмены регистрации обработчика события.

Visual Basic

Public Class EventDemo

Public Event DemoEvent As DemoDelegate

public Sub FireEvent()

RaiseEvent DemoEvent(44); End Sub End Class

Public Class Subscriber

Public Sub Handler(ByVal x As Integer)

handler implementation

End Sub End Class

Dim evd As New EventDemo() Dim subscr As New Subscriber()

AddHandler evd.DemoEvent, AddressOf subscr.Handler evd.FireEvent()

Visual Basic предлагает другой синтаксис, который отсутствует в других языках: вы можете также использовать ключевое слово Handles с методом, подписанным на событие. Необходимым условием для этого является определение переменной с ключевым словом WithEvents:

Public Class Subscriber

Public WithEvents evd As EventDemo

Public Sub Handler(ByVal x As Integer) Handles evd.DemoEvent

Реализация обработчика End Sub

Public Sub Action()

evd = New EventDemo()

evd.FireEvent() End Sub End Class

Обобщения

Все три языка поддерживают создание и использование обобщений. Обобщения обсуждались в главе 9.

Для использования обобщений C# позаимствовал синтаксис из шаблонов C++ для определения обобщенных типов с угловыми скобками. C++/CLI использует тот же синтаксис. В Visual Basic обобщенный тип определен с ключевым словом Of в скобках.

C#

List<int> intList = new List<int>(); intList.Add(1) intList.Add(2) intList.Add(3)

C++/CLI

List<int> intList = gcnew List<int>();

intList->Add(1) intList->Add(2) intList->Add(3)



Visual Basic

Dim intList As List(Of Integer) = New List(Of Integer)()

intList.Add(1)

intList.Add(2)

intList.Add(3)

Поскольку вы используете угловые скобки в объявлении класса, компилятор знает, что он должен создать обобщенный тип. В конструкции where определены ограничения (constraints).

public class MyGeneric<T> where T : IComparable<T>

private List<T> list = new List<T>(); public void Add(T item)

list.Add(item);

public void Sort()

list.Sort();

Определение обобщенного типа в C++/CLI подобно определению шаблона в C++. Вместо ключевого слова template с обобщениями используется ключевое слово generic. Конструкция where похожа на такую же в C#; однако в C++/CLI не поддерживаются ограничения конструктора.

generic <typename T>

where T : IComparable<T> ref class MyGeneric

private:

List<T> list; public:

MyGeneric()

list = gcnew List<T>(); void Add(T item)

list->Add(item); void Sort()

list->Sort();

В Visual Basic обобщенный класс определяется с помощью ключевого слова Of. Ограничения могут быть определены с помощью ключевого слова As.

Public Class MyGeneric(Of T As IComparable(Of T)) Private myList = New List(Of T) Public Sub Add(ByVal item As T)

myList.Add(item) End Sub

Public Sub Sort()

myList.Sort() End Sub End Class



Запросы LINQ

Интегрированные в язык запросы - средство C# 3.0 и Visual Basic 9.0. Синтаксис, используемый в двух языках, очень похож.

LINQ обсуждается в главе 11.

C#

var query = from r in racers

where r.Country == Brazil

orderby r.Wins descending

select r; Visual Basic

Dim query = From r in racers

Where r.Country = Brazil Order By r.Wins Descending

Select r

C++/CLI не поддерживает запросов LINQ.

Смешивание родного

и управляемого кода в C++/CLI

Одним из наибольших преимуществ C++/CLI является возможность смешивания родного и управляемого кода. Использование родного кода из C# осуществляется через механизм, известный, как врезов платформы (platform invoke). Этот механизм обсуждается в главе 24. Использование родного кода из C++/CLI известно под термином It just works ( Это просто работает ).

В управляемом классе вы можете использовать как родной, так и управляемый код, как видно в приведенном ниже фрагменте. То же справедливо и для родного класса. Вы также можете смешивать родной и управляемый код внутри метода.

#pragma once

#include <iostream> включаем этот файл для cout

using namespace std; заголовок iostream определен в пространстве имен std using namespace System; public ref class Managed

public:

void MixNativeAndManaged()

cout << Родной код << endl; Console::WriteLine( УправляемIЙ код );

В управляемом классе вы также можете объявить поле родного типа или указатель на родной тип. Сделать то же самое другим способом напрямую невозможно. Вы должны позаботиться о том, чтобы экземпляр управляемого типа мог быть перемещен сборщиком мусора при очистке памяти.

Для использования управляемых классов как членов родных классов в C++/CLI определено ключевое слово gcroot, которое находится в заголовочном файле gcroot.h. gcroot является оболочкой для GCHandle, который отслеживает объект CLR из родной ссылки.



1 ... 6 7 8 [ 9 ] 10

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика