bool、int和string(举几个例子)都是System类型的别名。
它们都可以在不包含System指令的情况下使用。
然而,如果没有System指令,就不能使用它们别名的类型。
public class Test
{
public static void Main()
{
bool b; //valid
Boolean b2; //compiler error
int i; //valid
Int32 i2; //compiler error
string s; //valid
String s2; //compiler error
}
}我几乎没有什么问题要问为什么要这样做。
System指令以确定混叠,而不对其他类型进行检查?bool、int、string等而不使用System指令总是安全的吗?发布于 2016-10-06 16:51:31
编译器是否为这些常用类型设置了异常?
是。
是否正在查看系统指令以确定混叠,而不对其他类型进行检查?
是。嗯,算是吧。没有系统指令。有一个using指令,您可以使用它导入定义类型的System命名空间。
在没有系统指令的情况下使用bool、int、string等总是安全的吗?
是。
许多现代语言(如C# )都受到C++的很大启发,而后者又受到了C的很大启发。C语言采取了编译器和运行时完全分离的创新立场。C (is)的编译器对标准库绝对不作任何假设。理论上,可以编写不包括标准库的C程序。
然而,像C#这样的语言认为编译器和运行时之间有一定程度的串通是有很大好处的。许多C#关键字依赖于运行时的支持。一个很好的例子就是yield return关键字。其他的例子是你的问题所问的类型。
发布于 2016-10-06 16:51:31
如果引用https://msdn.microsoft.com/en-us/library/ya5y69ds.aspx,则可以看到内置布尔类型是System.Boolean的别名,而不是Boolean,即别名完全限定。
因此,当您编写int x;时,它会被别名为System.Int32 x;,而不仅仅是Int32,否则如果在您自己的名称空间中定义一个名为Int32的类型,它们可能会发生冲突。
使用这些内置类型应该始终是安全的,您不存在与C/C++有时“内置”类型有不同的底层类型的问题,因此在根据平台调用sizeof时返回不同的值。
https://stackoverflow.com/questions/39901416
复制相似问题