Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 什么是「;本地的;及;字面上的;关键词_C#_.net_Keyword - Fatal编程技术网

C# 什么是「;本地的;及;字面上的;关键词

C# 什么是「;本地的;及;字面上的;关键词,c#,.net,keyword,C#,.net,Keyword,我看到很多次在C#文章中使用本地和文本“关键字”。它们是什么意思 示例: : 空常量保存空字符串值。我们需要打电话给警察 字符串构造函数,以便编译器不会将其标记为 文字。将此标记为文字将意味着它不会显示 作为我们可以从本地访问的字段 简单/基本类型 这两种语言都支持许多内置的 通过值而不是引用复制和传递的类型。 Java将这些类型称为基元类型,而将它们称为简单类型 用C#输入。简单/基本类型通常具有本机支持 从底层处理器体系结构 根据C规范第2.4.4节: 文本是值的源代码表示形式 例如,字符

我看到很多次在C#文章中使用本地文本“关键字”。它们是什么意思

示例:

:

空常量保存空字符串值。我们需要打电话给警察 字符串构造函数,以便编译器不会将其标记为 文字。将此标记为文字将意味着它不会显示 作为我们可以从本地访问的字段

简单/基本类型
这两种语言都支持许多内置的 通过值而不是引用复制和传递的类型。 Java将这些类型称为基元类型,而将它们称为简单类型 用C#输入。简单/基本类型通常具有本机支持 从底层处理器体系结构

根据C规范第2.4.4节:

文本是值的源代码表示形式

例如,字符串和数字有文字:

string x = "hello";
int y = 10;
。。。但是C#没有日期和时间的字面语法;您必须使用:

DateTime dt = new DateTime(2011, 12, 11);
对于本地支持,这里有不同层次的“原生”,但是就C语言而言,我通常会考虑使用任何输出格式的特定类型的支持。例如,有IL指令处理二进制浮点类型(
float
double
),但当C编译器发出处理
decimal
值的代码时,它必须调用
System.decimal
中声明的运算符。因此,我认为<代码>浮点和在IL有本地支持,但是<代码>十进制< /代码>没有。

(例如,可以编写针对不同平台的C#编译器,这些平台本机支持
十进制
,或者本机不支持
浮点
双精度
。不太可能,但可能。)


然后,当IL在执行引擎中运行时,它将在“真正的”本机代码(例如x86)上运行,该代码可以对某些类型提供特定支持。这是“本土”的另一个层次。例如,如果有人提出了一个新版本的IL,其中包括对十进制的本机支持,这并不意味着CPU本身突然获得了本机支持。

字符串中的引用。空文章看起来像是代码注释与其关联代码不同步的典型案例。注释说“我们正在调用构造函数而不是使用文本”,但代码没有调用构造函数:它使用文本。这个故事的寓意是:不要让你的困惑让你觉得你误解了,因为评论令人困惑

有很多关于string.Empty的错误信息,因为这有点奇怪。表达式new string()==“”通常应为false,因为new运算符通常应创建一个新实例。但它不创建新实例,而是返回intern池中的实例,该实例与“”相同,因此表达式为true

我怀疑“从本机访问”中的“本机”指的是本机代码(Jon Skeet提到的“本机”的第二种含义)。但如果我是你,我就不会在那篇文章上花太多时间。它过于关注抽象的理论,不管怎么说,它似乎是不正确的


如果您想知道string.Empty是否比“”更高效,请编译同一函数的两个版本,并检查IL。如果IL不同,请运行一些性能测试。

请您友好地更新帖子,并根据您的回答解释这句话:“将其标记为文字将意味着它不会显示为我们可以从本机访问的字段”@gdoron:我不知道-老实说,这对我来说没有多大意义。我相信这是在谈论从本机代码访问,而不是对本机类型的支持,但我不知道评论背后的细节。感谢您从这些评论和文章中获得的救赎!这个评论并没有过时。这意味着将调用类构造函数。初始化静态字段和属性会隐式创建一个类构造函数,该构造函数在第一次引用该类时自动调用。