Этот программный код очень похож на программный код приложений, создававшихся нами ранее. Единственным отличием является то, что теперь приложение-клиент 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 является
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.
Создание и использование многомодульных компоновочных блоков