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

ЖАНРЫ

C# для профессионалов. Том II

Ватсон Карли

Шрифт:

// код для JavaFrame.java

Package com.javaapp;

import java.awt.*;

import java.io.*;

import com.javalib.AddLib;

public class JavaFrame extends java.awt.Frame {

 public static void main (String[] args) {

JavaFrame jfrm = new JavaFrame;

jfrm.setSize(100, 100);

jfrm.setVisible(true);

AddLib lib = new AddLib;

jfrm setTitle("Frame Version " + lib.operationAdd(12, 23));

 }

}

//
код для AddLib.java

Package com.javalib;

public class AddLib {

 public AddLib {

 }

 public int operationAdd(int a, int b) {

return a + b;

 }

}

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

– classpath
для определения, где компилятор может искать разрешение символов, не определенных в исходном коде (различные компиляторы могут иметь различные имена для этого ключа). Система имеет также переменную среды окружения
Classpath
. Если ключ
– classpath
не определен, то компилятор будет искать переменную окружения, если ключ
– classpath
определен, то он переопределяет любые записи
Classpath
, которые могут существовать среди переменных окружения для этой специфической компиляции.

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

JavaFrame
и
AddLib
необходимо будет откомпилировать в файлы классов. Путь доступа к этим файлам классов можно затем добавить к переменной окружения
CLASSPATH
. Когда путь доступа к классам задан, любые классы из пакета могут выполняться из любого каталога в системе, передавая полностью квалифицированное имя класса в виртуальную машину. Вызов с помощью SUN Microsystems JDK 1.3:

java javalib.JavaFrame

приводит к выполнению программы

JavaFrame
и созданию
Frame
с панелью заголовка, выводящей Java Frame Version 35.

Код в C# всегда после компиляции автоматически объединяется в тот или иной тип компонента. Единицы компиляции могут содержать столько файлов и определений классов, сколько потребуется. Способ использования этой функциональности снова делится между использованием командной строки и использованием IDE (в частности, Visual Studio.NET). Создание нового проекта с помощью VS.NET требует, чтобы был определен тип создаваемого проекта. Среди других имеются возможности создать консольное приложение, оконное приложение и библиотеку классов. Можно создать даже пустой проект и определить тип вывода позже. Процесс определения типа вывода проекта с помощью VS.NET описан дальше в этом разделе. В командной строке для изменения типа вывода используется ключ

/target: <target-type>
, где
target-type
является одной из строк:

Ехе

Library

Winexe

Можно добавить любое число файлов как аргументы, разделенные пробелами:

csc /target:<target-type> <file1> <file2> ... <filen>

Добавление

нескольких файлов в единицу компиляции с помощью VS.NET является вопросом добавления отдельных файлов в проект. Можно легко изменить тип выходного файла, поменяв свойство Output Type на странице General Properties (смотрите выше детали доступа к странице с общими свойствами).

Пространства имен

Цель данного изложения состоит в создании версии C# файлов исходного кода

JavaFrame
и
AddLib
и рассмотрении деталей процесса создания кода C#. Так как два эти класса используют пакеты и импортирование, необходимо обсудить их эквиваленты в C#.

Классы Java могут располагаться в логических подразделениях, называемых пакетами. Пакет определяется как сущность, которая группирует классы вместе. Пакеты могут облегчить импорт другого кода программиста и более важно определить ограничения доступа к переменным и методам.

Пространства имен в C# предоставляют аналогичный механизм для объединения управляемых классов, но являются значительно более мощными и гибкими. Здесь речь идет об управляемых классах, а не специальных классах C#, так как классы в пространстве имен могут быть из любого, соответствующего CLS, языка (вспомните, что CLS является независимым от языка). Пакеты и пространства имен, однако, существенно различаются своей реализацией. Класс Java, который необходимо, например, сделать частью пакета

com.samples
, должен иметь в качестве первой строки кода в файле
Package com.samples
. Это, конечно, исключает какие-либо комментарии. Любой код внутри этого файла автоматически становится частью указанного пакета. Имя пакета в Java также связывается с папкой, содержащей файл класса в том смысле, что они должны иметь одинаковые имена. Пакет
com.samples
поэтому должен находиться в файле, который существует в папке com\samples. Давайте рассмотрим некоторые примеры того, как работают пакеты.

// package_samples.java

package samples.on; // отображает прямо в папку, где находится файл класса

public class Packaging {

 int x;

 public class Internal {

// находится автоматически в том же пакете

 }

 public static void main(String args[]) {

 }

}

class Internal {

 // находится автоматически в том же пакете

}

Примеры того, как этот код может выполняться, приведены ниже. Это, конечно, предполагает, что файл класса был сделан доступным для JRE:

□ Из командной строки:

java samples.on.Packaging

□ Как непосредственная ссылка в коде:

// Referencer.java

public class Referencer {

 samples.on.Packaging pack = new samples.on.two.three.Packaging;

□ Используя директиву

import
, можно опустить полностью квалифицированные имена пакетов, поэтому
Referencer
запишется как:

// Referencer.java

import samples.on.*;

public class Referencer{

 Packaging pack = new Packaging;

}

Помещение класса в пространство имен достигается в C# с помощью ключевого слова

namespace
с идентификатором и заключением целевого класса в скобки. Вот пример:

// namespace_samples.cs

namespace Samples.On {

 using System;

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