什么是"原生"和"文字"关键字

gdo*_*ica 9 .net c# keyword

我在C#文章中多次使用原生文字 "关键字".他们的意思是什么?

例子:

string.Empty文章:

Empty常量保存空字符串值.我们需要调用String构造函数,以便编译器不会将其标记为 文字.将其标记为文字将意味着它不会显示为我们可以从本机访问的字段.

C#vs Java维基百科文章:

简单/原始类型
两种语言都支持许多内置类型,这些类型按值而不是通过引用进行复制和传递.Java将这些类型称为原始类型,而它们在C#中称为简单类型.简单/原始类型通常具有来自底层处理器体系结构的本机支持.

Jon*_*eet 14

从C#规范部分2.4.4:

文字是一个值的一个源代码表示.

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

string x = "hello";
int y = 10;
Run Code Online (Sandbox Code Playgroud)

...但是C#没有日期和时间的文字语法; 你必须使用:

DateTime dt = new DateTime(2011, 12, 11);
Run Code Online (Sandbox Code Playgroud)

至于原生支持 - 这里有不同级别的"原生",但就C#而言,我通常会考虑使用任何输出格式的类型特定支持.因此,例如,存在 IL指令来处理二进制浮点类型(float,double),但是当C#编译器生成代码处理decimal值,它必须调用声明的运算System.Decimal.因此,我会考虑float并在IL中double提供原生支持,但decimal事实并非如此.

(这将有可能写一个C#编译器针对不同的平台,确实有原生支持decimal-或没有原生支持float,并double,例如可能性不大,但有可能.)

然后,当IL在执行引擎中运行时,它将在"真实"本机代码(例如x86)之上运行 - 它可以对某些类型具有特定支持.这是"原生"的另一个层次.例如,如果某人想出了包含原生支持的新版IL decimal,那并不意味着CPU本身突然获得了原生支持.

  • @gdoron:我不知道 - 说实话,对我来说没什么意义.我相信它是在谈论从本机代码访问,而不是支持本机类型,但我不知道评论背后的细节. (2认同)