Чтение онлайн

ЖАНРЫ

ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Троелсен Эндрю

Шрифт:

Рис. 11.9. Visual Studio 2005 копирует приватные компоновочные блоки в каталог клиента

С этого момента вы можете компоновать приложение-клиент с использованием внешних типов. Модифицируйте свой исходный C#-файл так.

using System;

// Не забудьте 'использовать' пространство имен CarLibrary!

using CarLibrary;

namespace CSharpCarClient {

 public class CarClient {

static void Main(string[] args) {

//
Создание спортивной машины.

SportsCar viper = new SportsCar("Viper", 240, 40);

viper.TurboBoost;

// Создание минивэна.

MiniVan mv = new MiniVan;

mv.TurboBoost;

Console.ReadLine;

}

 }

}

Этот программный код очень похож на программный код приложений, создававшихся нами ранее. Единственным отличием является то, что теперь приложение-клиент C# использует типы, определенные в отдельном пользовательском компоновочном блоке. Запустите эту программу, и вы увидите на своем экране целый ряд окон сообщений.

Исходный код. Проект CSharpCarClient размещён в подкаталоге, соответствующем главе 11.

Создание приложения-клиента в Visual Basic .NET

Чтобы продемонстрировать языковую независимость платформы .NET, создадим другое консольное приложение (VbNetCarClient) на этот раз с помощью Visual Basic .NET (рис. 11.10). Создав проект, укажите ссылку на CarLibrary.dll с помощью диалогового окна Add Reference.

Рис. 11.10. Создание консольного приложения Visual Basic .NET

Как и в C#, в Visual Basic .NET требуется указать список всех пространств имен, используемых в текущем файле. Но в Visual Basic .NET для этого предлагается использовать ключевое слово Imports, а не ключевое слово using, как в C#. С учетом этого добавьте следующий оператор Imports в файл программного кода Module1.vb.

Imports CarLibrary

Module Module1

 Sub Маin

 End Sub

End Module

Обратите внимание на то, что метод Main определен в рамках типа Module Visual Basic .NET (который не имеет ничего общего с файлами *.netmodule многомодульных компоновочных блоков). В Visual Basic .NET Module используется просто для обозначения определения изолированного класса, содержащего только статические методы. Чтобы сделать это утверждение более понятным, вот аналог соответствующей конструкции в C#.

// 'Module' в VB .NET - это просто изолированный класс,

// содержащий статические методы.

public sealed class Module1 {

 public static void Main {

 }

}

Так или иначе, чтобы использовать типы MiniVan и SportsCar в рамках синтаксиса Visual Basic .NET, измените метод Main так, как предлагается ниже.

Sub Main

 Console.WriteLine("***** Забавы с Visual Basic .NET *****")

 Dim myMiniVan As New MiniVan

 myMiniVan.TurboBoost

 Dim mySportsCar As New SportsCar

 mySportsCar.TurboBoost

 Console.ReadLine

End Sub

После

компиляции и выполнения приложения вы снова увидите соответствующий набор окон с сообщениями.

Межъязыковое перекрестное наследование

Весьма привлекательной возможностью .NET является межъязыковое перекрестное наследование. Для примера давайте создадим новый класс Visual Basic .NET, который будет производным от SportsCar (напомним, что последний был создан в C#). Сначала добавим файл нового класса с именем PerformanceCar.vb в имеющееся приложение Visual Basic .NET (с помощью выбора Project->Add Class из меню). Обновим исходное определение класса путем получения производного типа из SportsCar, используя ключевое слово Inherits. Кроме того, переопределим абстрактный метод TurboBoost, используя для этого ключевое слово Overrides.

Imports CarLibrary

' Этот VB-тип является производным C#-типа SportsCar.

Public Class PerformanceCar Inherits SportsCar

 Public Overrides Sub TurboBoost

Console.WriteLine("От нуля до 100 за какие-то 4,8 секунды…")

 End Sub

End Class

Чтобы проверить работу нового типа класса, обновите метод Main модуля так.

Sub Main

 …

 Dim dreamCar As New PerformanceCar

 ' Наследуемое свойство.

 dreamCar.PetName = "Hank"

 dreamCar.TurboBoost

 Console.ReadLine

End Sub

Обратите внимание на то, что объект dreamCar способен вызывать любые открытые члены (например, свойство PetName) по цепочке наследования, несмотря на то, что базовый класс определен на совершенно другом языке и в другой библиотеке программного кода.

Исходный код. Проект VbNetCarClient размещен в подкаталоге, соответствующем Главе 11.

Создание и использование многомодульных компоновочных блоков

Теперь, когда вы научились строить и использовать одномодульные компоновочные блоки, рассмотрим процесс создания многомодульных компоновочных блоков, Напомним, что многомодульный компоновочный блок – это просто набор связанных модулей, инсталлируемых как цельная единица и контролируемых по единому номеру версии. На момент создания этой книги в Visual Studio 2005 не предлагался шаблон проекта дли многомодульного компоновочного блока C#. Поэтому для построения такого проекта вам придется использовать компилятор командной строки (csc.exe).

Для примера мы с вами построим многомодульный компоновочный блок с названием AirVehicles (авиатранспорт). Первичный модуль (airvehicles.dll) будет содержать один тип класса Helicopter (вертолет). Соответствующий манифест (также содержащийся в airvehicles.dll) каталогизирует дополнительный файл *.netmodule с именем ufo.netmodule, который будет содержать другой тип класса, называющийся, конечно же, Ufo (НЛО). Эти два типа класса физически содержатся в отдельных двоичных файлах, но мы сгруппируем их в одном пространстве имен, названном AirVehicles. Наконец, оба класса будут созданы с помощью C# (хотя вы, если хотите, можете использовать и разные языки).

Поделиться с друзьями: