Приветствую всех, сегодня поговорим о двух маленьких но очень важных темах. Разберемся в начале что такое пространство имен в .net
Пространства имен (namespace) — это способ, благодаря которому .NET избегает конфликтов имен между классами.
1 2 |
System.Console.WriteLine("nookery.ru"); //В данном примере пространство имен System. |
Свойства пространства имен:
- Организация крупных проектов по созданию кода.
- Для их разделения используют оператор . (точка).
- Директива using исключает требование на указание имени пространства имен для каждого класса, избавляя от необходимости полной квалификации имен стереотипов.
- Пространство имен global является корневым пространством имен:
global::System всегда будет ссылаться на пространство имен платформы
.NET Framework System
using
Директива using — импортирует пространство имен, избавляя от необходимости полной квалификации имен стереотипов.
Использовав using System; Нам больше не нужно вводить полный путь, таким образом мы можем вызывать методы быстрее и короче.
1 |
Console.WriteLine("nookery.ru"); |
Директива using позволяет создавать псевдонимы пространства имен или типа. Это называется директива using alias
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using My=System; namespace ConsoleApp { class Program { static void Main(string[] args) { My.Console.WriteLine("nookery.ru"); My.Console.ReadKey(); } } } |
Директива using alias не может иметь открытый универсальный тип с правой части. Например, невозможно создать using alias для List<T>, но можно создать для List<int>.
В случае отсутствия импорта пространства имен System, полные имена базовых типов будут недоступными.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//using System; namespace ConsoleApp20 { class Program { static void Main(string[] args) { Int32 a = 0; //не доступно int a= 32; //доступно } } } |
Как подключить алиас?
Для подключения алиаса выполните следующие действия:
• Добавьте в References необходимые сборки.
• Откройте папку References.
• Правой кнопкой мыши кликните по сборке, откроется контекстное
меню, в котором выберите пункт Properties.
• В открывшемся окне свойств, в свойстве Aliases, замените значение
global на свое название
Директивы препроцессора C#:
С помощью директив препроцессора любой раздел кода С# можно компилировать условно. Директивы препроцессора — это специальные инструкции для компилятора,
которые начинаются с символа # (и, в отличие от других конструкций С#, должны полностью располагаться в одной строке). Логически они выполняются перед основной компиляцией.
Директива #region позволяет указать блок кода, который можно разворачивать и сворачивать с помощью функции структурирования в редакторе кода Visual Studio.
Это очень удобно, когда идет работа над большим файлом где много строк кода, позволяет лучше сконцентрироваться над тем участком кода, над которым идет работа.
Директива #if #endif
При обнаружении компилятором C# директивы #if , за которой далее следует директива #endif , компиляция кода между двумя директивами выполняется только в том случае, если определен указанный символ.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
using System; namespace ConsoleApp20 { class Program { static void Main(string[] args) { #if true //false Console.WriteLine("nookery.ru 1"); #endif Console.WriteLine("nookery.ru 2"); Console.ReadKey(); //nookery.ru 1 //nookery.ru 2 } } } |
Оператор #if , вместе с операторами # else, #elif, #endif, #define и #undef , позволяет включать или исключать код на основе существования одного или нескольких символов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#define MYTEST using System; public class MyClass { static void Main() { #if (DEBUG && !MYTEST) Console.WriteLine("DEBUG is defined"); #elif (!DEBUG && MYTEST) Console.WriteLine("MYTEST is defined"); #elif (DEBUG && MYTEST) Console.WriteLine("DEBUG and MYTEST are defined"); #else Console.WriteLine("DEBUG and MYTEST are not defined"); #endif } } |
Это особенно полезно при компиляции кода для построения отладки или при компиляции для определенной конфигурации.
#warning позволяет создать предупреждение первого уровня из определенного места в коде. Пример:
Это очень удобно, таким образом в большом коде можно легко найти место где ведется работа, либо пометки созданные разработчиком.
#error позволяет создать ошибку из определенного места в коде. Пример:
Таким образом можно легко найти искусственно созданную ошибку в случаи необходимости, а так же запрету сборки проекта.
Директива #line позволяет изменять номер строки компилятора и при необходимости имя файла, в который будут выводиться ошибки и предупреждения. В этом примере показано, как включить в отчет два предупреждения, связанные с номерами строк.
С помощью директивы #line мы смогли переместить вызов ошибки со строки 12 на строку 5. Так же с помощью этой директивы мы можем обходить участки кода при отладке, для этого надо написать:
1 2 3 4 5 6 7 8 9 |
static void Main(string[] args) { Console.WriteLine("Normal line #1."); // Set break point here. #line hidden Console.WriteLine("Hidden line."); #line default Console.WriteLine("Normal line #2."); } |