свойствами).

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

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

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

Пространства имен в C# предоставляют аналогичный механизм для объединения управляемых классов, но являются значительно более мощными и гибкими. Здесь речь идет об управляемых классах, а не специальных классах C#, так как классы в пространстве имен могут быть из любого, соответствующего CLS, языка (вспомните, что CLS является независимым от языка). Пакеты и пространства имен, однако, существенно различаются своей реализацией. Класс Java, который необходимо, например, сделать частью пакета com.samples, должен иметь в качестве первой строки кода в файле Package com.samples. Это, конечно, исключает какие-либо комментарии. Любой код внутри этого файла автоматически становится частью указанного пакета. Имя пакета в Java также связывается с папкой, содержащей файл класса в том смысле, что они должны иметь одинаковые имена. Пакет com.samples поэтому должен находиться в файле, который существует в папке comsamples. Давайте рассмотрим некоторые примеры того, как работают пакеты.

// 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;

 public class Example {

  public Example() {

  }

 }

}

Преимущество использования скобок для явного ограничения пространства имен состоит в том, что это задает определенный пользователем тип в реальном классе, определенном в файле, а не в самом файле. В Java файлы и папки косвенно представляют структуры языка, так как они аналогичны классам и пакетам, содержащим эти классы. В C# файлы не связаны принудительно с чем-либо, поэтому они становятся местом, где располагается определение класса, а не частью какой-либо структуры языка. Пространства имен также не связаны с папками. Следовательно, в одном файле можно ввести несколько пространств имен без всяких ограничений. Можно, например, добавить определение нового класса и поместить его в новое пространство имен в том же файле и по-прежнему оставаться в границах языка:

// namespace_samples.cs

namespace Samples.On {

 using System;

 public class Example {

  public Example() {

  }

 }

}

namespace Com.Cslib {

 using System;

 using System.Collections;

 public class AddLib {

  public AddLib() {

  }

  public int operationAdd(int a, int b) {

   return a + b;

  }

 }

}

Пространства имен вводятся с помощью директивы using <namespace name>, где <namespace name> является именем пространства имен. В C# не требуется использовать *, так как директива using неявно импортирует все элементы указанного пространства имен. Другим преимуществом является то, что пространства имен могут быть добавлены исключительно в конкретный класс. Хотя классы Example и AddLib выше определены в файле namespace_samples.cs. Example не имеет доступа к пространству имен System.Collections, несмотря на то, что AddLib его имеет. Однако инструкция import из Java не является специфической для класса. Она импортирует указанные элементы в файл. Вновь обратимся к х.java.

// х.java

public class x {

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату