首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当系统指令丢失时,类型别名是如何解析的?

当系统指令丢失时,类型别名是如何解析的?
EN

Stack Overflow用户
提问于 2016-10-06 16:39:18
回答 2查看 51关注 0票数 1

boolintstring(举几个例子)都是System类型的别名。

它们都可以在不包含System指令的情况下使用。

然而,如果没有System指令,就不能使用它们别名的类型。

代码语言:javascript
复制
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指令以确定混叠,而不对其他类型进行检查?
  • 使用boolintstring等而不使用System指令总是安全的吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-06 16:51:31

编译器是否为这些常用类型设置了异常?

是。

是否正在查看系统指令以确定混叠,而不对其他类型进行检查?

是。嗯,算是吧。没有系统指令。有一个using指令,您可以使用它导入定义类型的System命名空间。

在没有系统指令的情况下使用bool、int、string等总是安全的吗?

是。

许多现代语言(如C# )都受到C++的很大启发,而后者又受到了C的很大启发。C语言采取了编译器和运行时完全分离的创新立场。C (is)的编译器对标准库绝对不作任何假设。理论上,可以编写不包括标准库的C程序。

然而,像C#这样的语言认为编译器和运行时之间有一定程度的串通是有很大好处的。许多C#关键字依赖于运行时的支持。一个很好的例子就是yield return关键字。其他的例子是你的问题所问的类型。

票数 0
EN

Stack Overflow用户

发布于 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时返回不同的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39901416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档