Практикум прикладного программирования на C# в среде VS.NET 2005

Простое приложение на нескольких языках программирования

Показывать лекцию целиком

Файлы к лабораторной работе Вы можете скачать здесь

Это небольшой пример для демонстрации способа многоязыковой разработки отдельных частей одного и того же приложения. Задача работы - продемонстрировать тот факт, что выбор языка в среде .NET не имеет никакого значения. Хоть пример является максимально простым, но принципы остаются неизменными независимо от сложности приложения. Важно лишь, чтобы при создании сборки учитывались общие требования к языкам для всех открытых переменных, методов и свойств.

План будет такой

  • Напишем базовый класс на C++
  • Напишем класс на Visual Basic.NET, который будет наследовать от класса C++
  • Напишем класс на C#, который в консольном приложении создаст экземпляр класса Visual Basic.NET и вызовет его метод
  • Выберите место для размещения нового решения
  • Через меню оболочки вызовите мастер создания нового пустого решения
  • Укажите в мастере имя решения HelloSolution
  • После щелчка по кнопке OK мастер создаст каталог, имя которого совпадает с именем решения HelloSolution. Решение будет состоять из нескольких проектов, которые будут храниться в подчиненных каталогах. Выбор шаблона Blank Solution указывает, что будет разрабатываться приложение, нейтральное к используемому языку.

    Написание класса на C++ .NET

  • Вызовите через меню оболочки мастер добавления нового проекта в наше пустое решение
  • Укажите мастеру, что мы собираемся добавить в решение проект типа библиотечного класса на управляемом C++ (C++.NET) с именем HelloCPP
  • Обратите внимание на нижнюю часть окна мастера, где прописан подчиненный каталог для размещения кода нового проекта, добавляемого в решение.

    После щелчка по кнопке OK мастер создаст заготовку кода добавляемого проекта HelloCPP. Состав файлов заготовки проекта отобразится в панели Solution Explorer

  • Откройте на редактирование файл HelloCPP.h. Его заготовка, созданная мастером, имеет вид
  • // HelloCPP.h
      
    #pragma once
      
    using namespace System;
      
    namespace HelloCPP
    {
      public __gc class Class1
      {
        // TODO: Add your methods for this class here.
      };
    }

    Не будем пока обращать внимание на некоторые новые элементы, заметим лишь, что заготовка создана для управляемого C++.

  • Замените сгенерированное мастером имя класса Class1 на более осмысленное HelloCPP.
  • Поскольку реализация класса весьма проста, разместим наш простой код прямо в заголовочном файле. Код будет выводить сообщение на главную консоль (экран).

  • Измените код файла HelloCPP.h, чтобы он выглядел так
  • // HelloCPP.h
      
    #pragma once
      
    using namespace System;
      
    namespace HelloCPP
    {
      public __gc class HelloCPP
      {
        // TODO: Add your methods for this class here.
      public:
        virtual void Hello()
        {
          Console::WriteLine("Привет из управляемого C++ !!!");
        }
      };
    }

    Здесь метод HelloCPP::Hello() использует функцию System::Console::WriteLine() из библиотеки классов .NET Framework для вывода в окно консоли приветствия от управляемого кода C++.

  • Постройте проект, не запуская его на выполнение, и убедитесь в отсутствии синтаксических ошибок
  • Написание класса на Visual Basic .NET

  • Вызовите через меню оболочки мастер добавления нового проекта в наше решение
  • Укажите мастеру, что мы собираемся добавить в решение проект типа библиотечного класса на Visual Basic .NET с именем HelloVB
  • Обратите внимание на нижнюю часть окна мастера, где прописан подчиненный каталог для размещения кода нового проекта, добавляемого в решение.

    После щелчка по кнопке OK мастер создаст заготовку кода добавляемого проекта HelloVB. Состав файлов заготовки добавленного проекта отобразится в панели Solution Explorer

    Теперь наше решение будет состоять из двух проектов.

  • В панели Solution Explorer оболочки выделите имя файла Class1.vb и переименуйте его в более осмысленное HelloVB.vb
  • Откройте файл (двойным щелчком) HelloVB.vb и отредактируйте его код так
  • Public Class HelloVB
        Inherits HelloCPP.HelloCPP
      
        Public Overrides Sub Hello()
            MyBase.Hello()
            System.Console.WriteLine("Привет из Visual Basic .NET!!!")
        End Sub
    End Class

    Этот код определяет класс HelloVB, наследующий от управляемого класса C++ с именем HelloCPP. Класс HelloVB замещает виртуальный метод Hello() родительского класса HelloCPP, но вначале вызывает версию метода Hello() из родительского класса HelloCPP, а затем выводит свое приветствие.

    Обратите внимание, что имя базового класса и имя замещаемого метода в редакторе кода оказались подчеркунутыми волнистой линией. Это говорит о том, что редактор кода эти имена не видит и заранее показывает синтаксическую ошибку. Если навести на подчеркнутые фрагменты кода курсор, то всплывающая подсказка точно определит проблему.

    Необходимо сообщить компилятору языка Visual Basic, где находится сборка, определяющая данный тип. Для этого

  • Выберите в оболочке команду меню Project/Add Reference... (Проект/Добавить ссылку)
  • В открывшемся диалоговом окне установите вкладку Project и щелкните по кнопке Select (или прежде щелчком по кнопке Browse найдите путь к проекту), а затем по кнопке OK.
  • Проект HelloCPP будет присоединен к решению и увидется в проекте HelloVB. Это можно наблюдать в панели Solution Explorer, где в узле ссылок References появилась ссылка на проект HelloCPP.

    Обратите внимание, что после проделанной работы присоединения подчеркивания в коде Visual Basic исчезли.

  • Постройте проект, не запуская его на выполнение, и убедитесь в отсутствии синтаксических ошибок
  • Если посмотреть каталоги проекта в проводнике Windows, то можно увидеть, что оболочка создала две библиотеки DLL (как мы и заказывали мастеру) и разместила их в каталоге bin последнего проекта.

    Написание класса на C# .NET и встраивание его в консольное приложение

    Приступим к написанию кода на C#. На этот раз мы создадим консольное приложение Visual C#, которое назовем HelloCSharp. Это имя и будет закреплено за исполнимым файлом консольного приложения.

  • Вызовите через меню оболочки мастер добавления нового проекта в наше решение
  • Укажите мастеру, что мы собираемся добавить в решение проект типа консольного приложения на C# с именем HelloCSharp
  • Обратите внимание на нижнюю часть окна мастера, где прописан подчиненный каталог для размещения кода нового проекта, добавляемого в решение.

    После щелчка по кнопке OK мастер создаст заготовку кода добавляемого проекта HelloCSharp. Состав файлов заготовки добавленного проекта отобразится в панели Solution Explorer, где уже находятся два ранее созданных нами проекта, составляющих решение

  • Переименуйте файл Class1.cs, автоматически сгенерированный мастером, в файл HelloCSharp.cs
  • Вызовите файл HelloCSharp.cs на редактирование, измените имя класса, уберите лишние комментарии, уберите аргументы функции Main() и дополните кодом, чтобы окончательный вид был таким
  • using System;
      
    namespace HelloCSharp
    {
      class HelloCSharp
      {
        [STAThread]
        static void Main()
        {
          HelloVB.HelloVB hello = new HelloVB.HelloVB();
          hello.Hello();
          Console.WriteLine("Привет из Visual C# .NET !!!");
      
          Console.ReadLine();// Для задержки окна вывода
        }
      }
    }

    Статический метод Main() является точкой входа в приложение. Этот метод создает новый объект класса HelloVB на куче и вызывает его метод Hello(), в который мы ранее зашили два сообщения - вначале из кода на C++.NET, затем из кода на VB.NET. Третье сообщение C# выдаст сам.

    Необходимо сообщить компилятору языка C#, где находится сборка, определяющая данный тип. На этот раз следует добавить в проект C# ссылку на оба проекта HelloCPP и HelloVB. Для этого:

  • Выберите в оболочке команду меню Project/Add Reference... (Проект/Добавить ссылку)
  • В открывшемся диалоговом окне установите вкладку Project, выделите оба предыдущих проекта и щелкните по кнопке Select (или прежде щелчком по кнопке Browse найдите путь к проекту), а затем по кнопке OK
  • Постройте проект, не запуская его на выполнение, и убедитесь в отсутствии синтаксических ошибок
  • После этого можно убедиться также, что в соответствующем каталоге последнего проекта помещены DLL двух первых проектов и создан исполнимый файл консольного приложения последнего проекта

    Наконец пришло время сделать последний проект стартовым проектом нашего решения. Хотя оболочка автоматически в данном случае назначила его стартовым, потому что это единственный исполнимый файл решения (в решение могут входить несколько исполнимых файлов, тогда не очевидно, какой из них будет стартовым и это нужно определять явно). Но для тренировки назначим последний проект стартовым.

  • Откройте панель Solution Explorer и щелкните правой кнопкой мыши на корневом узле проекта с именем HelloCSharp. В появившемся контекстном меню выполните команду Set as StartUP Project
  • Запустите проект - должен получиться следующий результат
  • Мы проиллюстрировали уникальную возможность разрабатывать различные части проекта на разных языках, поддерживаемых средой .NET, или подключать к проекту файлы с DLL, разработанные в этой среде другими программистами неважно на каком языке. Открывается огромная перспектива для переносимости и приемственности кода!

    Вернуться к учебному плану