Using Namespaces to control scope 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Using Namespaces to control scope



The namespace keyword is used to declare a scope. The ability to create scopes within your project helps organize code and lets you create globally-unique types. In the following example, a class titled SampleClass is defined in two namespaces, one nested inside the other. The. Operator is used to differentiate which method gets called.

namespace SampleNamespace { class SampleClass { public void SampleMethod() { System.Console.WriteLine( "SampleMethod inside SampleNamespace"); } } // Create a nested namespace, and define another class. namespace NestedNamespace { class SampleClass { public void SampleMethod() { System.Console.WriteLine( "SampleMethod inside NestedNamespace"); } } } class Program { static void Main(string[] args) { // Displays "SampleMethod inside SampleNamespace." SampleClass outer = new SampleClass(); outer.SampleMethod(); // Displays "SampleMethod inside SampleNamespace." SampleNamespace.SampleClass outer2 = new SampleNamespace.SampleClass(); outer2.SampleMethod(); // Displays "SampleMethod inside NestedNamespace." NestedNamespace.SampleClass inner = new NestedNamespace.SampleClass(); inner.SampleMethod(); } }}

Использование пространств имен для управления областью действия

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

ß-----


Fully Qualified Names

Namespaces and types have unique titles described by fully qualified names that indicate a logical hierarchy. For example, the statement A.B implies that A is the name of the namespace or type, and B is nested inside it.

In the following example, there are nested classes and namespaces. The fully qualified name is indicated as a comment following each entity.

namespace N1 // N1 { class C1 // N1.C1 { class C2 // N1.C1.C2 { } } namespace N2 // N1.N2 { class C2 // N1.N2.C2 { } } }

In the previous code segment:

· The namespace N1 is a member of the global namespace. Its fully qualified name is N1.

· The namespace N2 is a member of N1. Its fully qualified name is N1.N2.

· The class C1 is a member of N1. Its fully qualified name is N1.C1.

· The class name C2 is used two times in this code. However, the fully qualified names are unique. The first instance of C2 is declared inside C1; therefore, its fully qualified name is: N1.C1.C2. The second instance of C2 is declared inside a namespace N2; therefore, its fully qualified name is N1.N2.C2.

Using the previous code segment, you can add a new class member, C3, to the namespace N1.N2 as follows:

namespace N1.N2 { class C3 // N1.N2.C3 { } }

Полные имена

Пространства имен и типы имеют уникальные названия, описываемые полными именами, показывающими логическую иерархию. Например, инструкция A.B подразумевает, что A — это имя пространства имен или типа, а B — это вложенный в него тип.

В следующем примере показаны вложенные классы и пространства имен. Полное имя указано в качестве примечания после каждой сущности.

ß---

 

В предыдущем фрагменте кода:

· пространство имен N1 является членом глобального пространства имен. Его полным именем является N1;

· пространство имен N2 является членом пространства имен N1. Его полным именем является N1.N2;

· класс C1 является членом пространства имен N1. Его полным именем является N1.C1;

· имя класса C2 используется в этом коде два раза. Однако полные имена являются уникальными. Первый экземпляр класса C2 объявлен внутри класса C1; следовательно, его полным именем является N1.C1.C2. Второй экземпляр класса C2 объявлен внутри пространства имен N2; следовательно, его полным именем является N1.N2.C2.

Используя предыдущий фрагмента кода, можно добавить новый член: класс C3, в пространство имен N1.N2, как показано ниже:

namespace N1.N2 { class C3 // N1.N2.C3 { } }

 


In general, use :: to reference a namespace alias or global:: to reference the global namespace and. to qualify types or members.

It is an error to use :: with an alias that references a type instead of a namespace. For example:

using Alias = System.Console;
class TestClass { static void Main() { // Error //Alias::WriteLine("Hi");   // OK Alias.WriteLine("Hi"); } }

Remember that the word global is not a predefined alias; therefore, global.X does not have any special meaning. It acquires a special meaning only when it is used with ::.

A warning (see Compiler Warning (level 2) CS0440) is generated if you define an alias named global because global:: always references the global namespace and not an alias. For example, the following line generates the warning:

using global = System.Collections; // Warning

Using :: with aliases is a good idea and protects against the unexpected introduction of additional types. For example, consider this example:

using Alias = System;
namespace Library { public class C: Alias.Exception { } }

This works, but if a type named Alias were to subsequently be introduced, Alias. would bind to that type instead. Using Alias::Exception insures that Alias is treated as a namespace alias and not mistaken for a type.


В общем, используйте ключевое слово :: для обращения к псевдониму пространства имен или ключевое слово global:: для обращения к глобальному пространству имен и ключевое слово. для уточнения типов или членов.

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

ß---

Обратите внимание, что ключевое слово global не является предопределенным псевдонимом. Следовательно, имя global.X не имеет какого-либо специального значения. Оно приобретает специальное значение только при использовании с ключевым словом ::.

В случае определения псевдонима global генерируется предупреждение (см. раздел Предупреждение компилятора (уровень 2) CS0440), потому что ключевое слово global:: всегда ссылается на глобальное пространство имен, а не на псевдоним. Например, следующая строка приведет к генерированию предупреждения:

using global = System.Collections; // Warning

Использование ключевого слова :: с псевдонимами является правильной методикой, защищающей от неожиданного введения дополнительных типов. Рассмотрим, например, следующий фрагмент кода:

using Alias = System;
namespace Library { public class C: Alias.Exception { } }

Этот код работает, но если в последующем будет введен тип Alias, то конструкция Alias. станет связана с этим типом. Использование конструкции Alias::Exception гарантирует, что имя Alias будет обрабатываться как псевдоним пространства имен и не будет ошибочно принято за тип.

 



Поделиться:


Последнее изменение этой страницы: 2017-01-19; просмотров: 133; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.16.69.143 (0.008 с.)