Я читал, что все примитивы попадают под пространство имен System
. Если я прокомментирую using System
, я ожидаю, что в моей программе будет ошибка сборки. Однако он работает успешно. Почему это?
Почему примитивные типы данных работают без включения пространства имен System?
Ответ 1
Это потому, что int
является псевдонимом для System.Int32
, а поскольку "Int32" уже имеет префикс своего пространства имен (т.е. "полностью соответствует" ), синтаксис легален, не указывая using System;
на вверху вашего кода.
Ниже описывается этот фрагмент MSDN ниже -
Большинство приложений С# начинаются с раздела с использованием директив. В этом разделе перечислены пространства имен, которые будут использоваться приложением часто и сохраняет программиста от указания полностью квалифицированного каждый раз, когда используется метод, содержащийся внутри. Для например, включив строку:
using System;
В начале программы программист может использовать код:
Console.WriteLine("Hello, World!");
Вместо:
System.Console.WriteLine("Hello, World!");
System.Int32
(aka "int" ) будет последним. Вот пример этого в коде -
//using System;
namespace Ns
{
public class Program
{
static void Main(string[] args)
{
System.Int32 i = 2; //OK, since we explicitly specify the System namespace
int j = 2; //alias for System.Int32, so this is OK too
Int32 k = 2; //Error, because we commented out "using System"
}
}
}
Так как строка 11 не полностью квалифицирована/сглаживает полностью квалифицированный тип, using System;
нужно будет раскупить, чтобы ошибка исчезла.
Дополнительные ссылки -
-
Таблица встроенных типов (ссылка на С#) (Перечисляет все встроенные типы и их эквиваленты платформы .NET)
Ответ 2
Как упоминалось ранее, int
является псевдонимом типа System.Int32
. Псевдоним примитивных типов неявно известен на языке С#. Вот список:
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
Итак, для этих псевдонимов, также известных как простые типы, вам не нужно указывать какое-либо пространство имен.
Ответ 3
Когда вы используете int, вы в основном вставляете System.Int32. Поскольку это полное имя типа, вам действительно не нужно using System;
Ваша программа будет работать, если вы сделали
System.Int32 num = 0;
даже без using