目前,我在Nutshell和Type Basics(位于第2章)子主题中阅读C#5.0,引入了预定义类型和自定义类型的对称性术语......
...为什么作者谈到这些类型之间的对称性?有什么理由说类型是对称的?
这是原始段落:
C#的一个很好的方面是预定义类型和自定义类型几乎没有差异.预定义的int类型用作整数的蓝图.它保存数据-32位 - 并提供使用该数据的函数成员,例如ToString.同样,我们的自定义UnitConverter类型充当单位转换的蓝图.它保存数据 - 比率 - 并提供功能成员使用该数据.
文本的含义是语言中的所有类型"表现得像对象".例如,您可以这样做:
int i = 42;
Console.WriteLine(i.ToString()); // called a method on an int
Run Code Online (Sandbox Code Playgroud)
尽可能容易地做到这一点:
DateTime d = DateTime.Now;
Console.WriteLine(d.ToString()); // called a method on a DateTime
Run Code Online (Sandbox Code Playgroud)
也就是说,如果您不知道类型,i并且d只是通过阅读调用的代码就无法推断出任何东西.ToString().
与C++这样的语言形成对比:
std::string s = "hello";
std::cout << s.length();
int i = 42;
// ...but you cannot invoke any method on i; "ints are special"
Run Code Online (Sandbox Code Playgroud)
这里s.length()汇编的事实告诉我们这s不是一个int,或一个指针,或任何其他原始类型.
从技术的角度来看,这种统一性不会给你带来任何好处,但它仍然是一个受欢迎的功能 - 特别是如果你只是学习语言.