Вход/Регистрация
C# для профессионалов. Том II
вернуться

Ватсон Карли

Шрифт:

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

Цель данного изложения состоит в создании версии 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;

 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
.

  • Читать дальше
  • 1
  • ...
  • 247
  • 248
  • 249
  • 250
  • 251
  • 252
  • 253
  • 254
  • 255
  • 256
  • 257
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: