目前,我正在阅读 C#5.0 in Nutshell 和Type Basics(位于第2章)子主题中,术语预定义类型和自定义类型的对称性是引入...
...为什么作者谈到这些类型之间的对称性?有什么理由说类型是对称的?
这是原始段落:
C#的一个优点是预定义类型和自定义类型几乎没有差异。预定义的 int 类型用作整数的蓝图。它保存数据-32位 - 并提供使用该数据的函数成员,例如 ToString 。同样,我们的自定义 UnitConverter 类型充当单位转换的蓝图。它保存数据 - 比率 - 并提供功能成员使用该数据。
答案 0 :(得分:5)
该文本的含义是语言中的所有类型“表现得像对象”。例如,您可以这样做:
int i = 42;
Console.WriteLine(i.ToString()); // called a method on an int
尽可能轻松地做到这一点:
DateTime d = DateTime.Now;
Console.WriteLine(d.ToString()); // called a method on a DateTime
也就是说,如果您不知道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"
这里s.length()
编译的事实告诉我们s
不是int
,或指针,或任何其他原始类型。
这种统一性从技术的角度来看并不能为你带来任何好处,但它仍然是一个受欢迎的功能 - 特别是如果你只是学习这门语言。
答案 1 :(得分:1)
有些语言无法创建与int
内置内容类似的行为。在C#中,可以创建具有'int'的所有属性的类型(这是System.Int32
的同义词) - 带有+ / - / =操作的值类型。
即。在JavaScript中,无法创建其他Array
类型或string
类型。在Java值类型中(不是?)不存在,因此程序员(Does Java make distinction between value type and reference type)无法写入等效于“int”的类型。
答案 2 :(得分:1)
我认为作者的观点是内置类型和自定义类型都旨在用于类似的目的;保存数据并提供使用该数据的机制。我相信在那里还有一个隐含的参考,内置对象和自定义对象都继承自System.Object
,因此它们具有相似的能力(即ToString()
)。
我不一定同意术语“对称性”,但这是关于这个话题的两分钱。