3

目前,我正在阅读C# 5.0 in a Nutshell和 Type Basics(位于第 2 章)子主题中,介绍了预定义类型和自定义类型的术语对称性......

...为什么作者谈论这些类型之间的对称性?说类型是对称的有什么论据?

这是原始段落:

C# 的一个优点是预定义类型和自定义类型几乎没有区别。预定义的int类型用作整数的蓝图。它保存数据 -32 位 - 并提供使用该数据的函数成员,例如ToString。同样,我们的自定义UnitConverter类型充当单位转换的蓝图。它保存数据 - 比率 - 并提供函数成员来使用该数据。

4

3 回答 3

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、 或指针,或任何其他原始类型。

从技术角度来看,这种统一性并没有给你带来任何好处,但它仍然是一个受欢迎的特性——尤其是如果你只是在学习这门语言。

于 2013-06-28T23:10:14.587 回答
1

在某些语言中,您无法创建行为类似于内置的类型的类型 like int。在 C# 中,可以创建具有 'int' 的所有属性的类型(它是 的同义词System.Int32) - 具有 +/-/= 操作的值类型。

即在 JavaScript 中不能创建另一种Array类型或string类型。在 Java 中,值类型(曾经?)不存在,因此程序员无法编写等效于“int”的类型(Java 是否区分值类型和引用类型)。

于 2013-06-28T23:11:06.750 回答
1

我相信作者的观点是内置类型和自定义类型都旨在服务于相似的目的。保存数据并提供使用该数据的机制。我相信那里还有一个隐蔽的引用,内置对象和自定义对象都继承自System.Object,因此它们具有相似的能力(即ToString())。

我不一定同意“对称”一词,但这是我在这个话题上的两分钱。

于 2013-06-28T23:11:56.363 回答