Пространство имен C # против директив

1

У меня многолетний опыт работы в C++ и Java, но я новичок в С#.

Недавно, когда я читал книгу на С#, они рассматривали следующее как пространство имен, которое я нашел его странным. Согласно моим знаниям в C++, это на самом деле предпроцессорные pre-processor directives.

using System;                      //A book called these as namespace
using System.Collections.Generic;  //A book called these as namespace
using System.Text;                 //A book called these as namespace

И, согласно веб-сайту msdn, вышесказанное известно как directives.

Если указанное выше namespace вызовов

Как насчет следующего?

namespace My_First_Program  //This is also call namespace
{
    class Program
    {
        static void Main()
    }
}

Поэтому мой первый вопрос: что именно является пространством имен? Правильно ли я звоню using System; как pre-processor directive?

Мой второй вопрос: могу ли я предположить, что namespace My_First_Program работает подобно using namespace std в C++?

Теги:
namespaces
naming

4 ответа

2

Следующий оператор определяет пространство имен:

namespace My_First_Program {
 ...
}

Любой код в фигурных скобках находится в (My_First_Program) пространстве имен My_First_Program.

С using "импорта" пространств имен ОТЧЕТНОСТИ, так что вы не должны использовать их полное имя.

Оператор 'using' не является предпроцессорной директивой. Вы можете найти их здесь.

2

Нет, С# с using не директива препроцессора.

В С# они почти идентичны C++

using System;

будет иметь аналогичное намерение

using namespace std;

или в Java

import java.util.*;

а именно, что символы в пространстве имен System теперь находятся в области видимости, при условии, что в этом проекте также ссылаются необходимые сборки. Без using всего кода, доступ к System должен будет квалифицировать полное пространство имен в качестве префикса, например System.DateTime. Вы также можете использовать псевдоним пространства имен с using, например, если результат добавления нескольких операторов using вносит в объем 2 или более символов с тем же именем, например (using m=My.Very.Long.NameSpace)

По аналогии:

namespace foo 
{

}

также имеет тот же эффект, что и в C++ - это помещает все символы, определенные в блоке, как в предоставленном пространстве имен, foo. Как и в случае с другими языками, это делается для предотвращения загромождения глобального пространства имен. Это очень похоже на ключевое слово package в файлах Java. Теоретически в C# вы можете иметь несколько блоков namespace в файле, хотя это было бы необычной и, вероятно, плохой практикой для этого.

0

Что именно является пространством имен? Правильно ли я звоню с помощью System; как предпроцессорная директива?

Нет, using System; просто включает пространство имен, чтобы вы могли обращаться к классам System без указания имени. Это не имеет ничего общего с директивами препроцессора на C#.

В этом случае System является пространством имен, но перед тем, как вы System пространство имен System с помощью директивы using, вы должны добавить ссылку на System.dll. Файлы DLL представляют собой сборки, которые могут содержать одно или несколько пространств имен.

Можно ли предположить, что пространство имен My_First_Program работает аналогично использованию пространства имен std в C++?

Нет, namespace My_First_Program - это объявление пространства имен. using namespace std аналогично использованию директивы в C#

0

Использование - это то же самое, что и импорт в java. Ваша книга ссылается на него как пространство имен, поскольку используется импорт пространства имен.

И да, насколько мне известно, использование пространства имен std в c++ такое же, как в С# с использованием системы;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню