在C#中,如果我使用诸如string
之类的类型别名而不是(System.String
),则无需添加using System;
指令-它可以正常编译。
但是,如果我将类型从别名显式更改为别名类型-System.String
-如果没有using
指令,它将无法编译。所有原始类型(int
/ Int32
,bool
/ Boolean
)等似乎都是如此。
为什么使用别名但不使用实际类型名称时,编译器为什么会为我导入System
?
答案 0 :(得分:0)
仅当不使用类型的完整合格名称时,才需要导入名称空间:
namespace Test {
class Cxx {
public System.String _exampleField;
}
}
vs:
using System;
namespace Test {
class Cxx {
public String _exampleField;
}
}
您可以使用别名从名称空间导入单个类型。
内置别名的工作方式与您编写的别名相似。
如果您拥有自己的别名而不是内置别名string
,则无需导入整个系统名称空间:
using mystring = System.String;
namespace Test {
class Cxx {
public mystring _exampleField;
}
}
如果您使用的系统名称空间中仅有的类型是具有别名的类型,则不需要导入。
namespace Test {
class Cxx {
public string _exampleField;
}
}
答案 1 :(得分:0)
在编译器正在插入的每个文件的顶部,别名更像“好像”一样
using string = System.String;
using int = System.Int32;
using decimal = System.Decimal;
等等。
我不相信编译器实际上是如何实现内置别名的 1 ,但这只是整体效果。当您使用using alias directives时,您也不需要为其封闭的名称空间使用using
指令,并且也不会将其封闭的名称空间引入作用域。
1 我在Roslyn github存储库中的search-foo让我失望了。
答案 2 :(得分:0)