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
Можно добавить любое число файлов как аргументы, разделенные пробелами:
нескольких файлов в единицу компиляции с помощью 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
с идентификатором и заключением целевого класса в скобки. Вот пример: