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

1 ... 4 5 6 [ 7 ] 8 9 10


Окончание табл. Б.4

C++/CLI

Visual Basic

Функциональность

Shadows

Скрывает метод из базового класса.

abstract

abstract

MustInherit

Абстрактный класс.

sealed

sealed

NotInheritable

Финальный класс (не наследуемый).

abstract

abstract

MustOverride

Абстрактный метод.

sealed

sealed

NotOverrideable

Финальный метод.

this

this

Ссылка на текущий объект.

base

Classname::

MyBase

Ссылка на базовый класс.

Порядок размещения ключевых слов в разных языках имеет значение. В следующем примере кода объявляется абстрактный базовый класс Base с одним абстрактным методом и одним реализованным виртуальным методом. От класса Base наследуется класс Derived, в котором абстрактный метод реализуется, а виртуальный метод переопределяется.

C#

public abstract class Base

public virtual void Foo()

public abstract void Bar();

public class Derived : Base

public override void Foo()

base.Foo();

public override void Bar()

C++/CLI

public ref class Base abstract

public:

virtual void Foo()

virtual void Bar() abstract;

public ref class Derived : public Base

public:

virtual void Foo() override

Base::Foo();



virtual void Bar() override

Visual Basic

Public MustInherit Class Base Public Overridable Sub Foo() End Sub

Public MustOverride Sub Bar() End Class

Public class Derived Inherits Base

Public Overrides Sub Foo()

MyBase.Foo() End Sub

Public Overrides Sub Bar() End Sub End Class

Управление ресурсами

Работа с ресурсами была описана в главе 12, как посредством интерфейса IDisposable, так и реализацией финализатора. В этом разделе мы покажем, как это выглядит в C++/CLI и Visual Basic.

Реализация интерфейса iDisposable

Для освобождения ресурсов в интерфейсе IDisposable определен метод Dispose(). Используя C# и Visual Basic, вы должны реализовать интерфейс IDisposable. В C++/ CLI этот интерфейс также реализован, но это осуществляется компилятором, если вы написали деструктор.

C#

public class Resource : IDisposable

public void Dispose()

освобождение ресурсов

C++/CLI

public ref class Resource

public:

~Resource()

освобождение ресурсов

Visual Basic Public Class Resource Implements IDisposable

Public Sub Dispose() Implements IDisposable.Dispose

освобождение ресурсов End Sub End Class

В C++/CLIметод Dispose() вызывается при использовании оператора delete.



Оператор using

Оператор C# using реализует шаблон захватить/использовать/освободить для освобождения ресурса, как только он более не используется - даже в случае возникновения исключения. Компилятор создает оператор try/finally и вызывает метод Dispose внутри блока finally. Версия Visual Basic 9 поддерживает оператор using подобно C#. В C++/CLI предусмотрен еще более элегантный подход к этой проблеме. Если ссылочный тип объявлен локально, то компилятор создает оператор try/finally для вызова метода Dispose() в конце блока.

C#

using (Resource r = new Resource())

r.Foo();

C++/CLI

Resource r;

r.Foo();

Visual Basic

Using r As New Resource

r.Foo()

End Using

Переопределение Finalize

Если класс содержит родные ресурсы, которые должны быть освобождены, он должен переопределить метод Finalize() класса Object. В C# это делается путем написания деструктора. В C++/CLI предусмотрен специальный синтаксис с префиксом ! для определения финализатора. Внутри финализатора не допускается освобождать содержащиеся объекты, также имеющие финализатор, поскольку четкий порядок фи-нализации не гарантирован. Вот почему шаблон Dispose определяет вдобавок метод Dispose() с параметром булевского типа. В C++/CLI нет необходимости реализовы-вать этот шаблон в коде, поскольку это делается компилятором. Деструктор C++/CLI реализует методы Dispose() . В Visual Basic и метод Dispose() , и финализатор должны быть реализованы вручную. Однако большинство классов Visual Basic не используют родные ресурсы непосредственно, а только с помощью других классов. В Visual Basic обычно нет необходимости переопределять метод Finalize(), но реализация метода Dispose() часто необходима.

Написание деструктора на C# переопределяет метод Finalize() базового класса. Деструктор C++/CLI реализует интерфейс IDisposable.

C#

public class Resource : IDisposable

-Resource переопределение Finalize

Dispose(false);

protected virtual void Dispose(bool disposing)

if (disposing) освободить вложенные члены



1 ... 4 5 6 [ 7 ] 8 9 10

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