2013-06-28 21 views
3

目前,我在果殼,並在基本型閱讀C#5.0(位於第2章)副標題預定義的類型和介紹了自定義類型的術語對稱...預定義類型和自定義類型之間的「對稱性」是什麼意思?

...爲什麼作者談論這些類型之間的對稱性?說什麼類型是對稱的?

這是原來的段落:

的C#美麗的方面是,預定義類型和自定義類型有一些區別。預定義的int類型用作整數的藍圖。它擁有數據-32位,並提供使用該數據的功能成員,如ToString。同樣,我們的自定義UnitConverter類型充當單位轉換的藍圖。它保存數據 - 比率 - 並提供使用該數據的功能成員。

+1

第二章不是類型基礎知識......實際上,沒有一章叫做類型基礎知識。頁碼?此外,這類問題不適用於SO。 –

+4

@newStackExchangeInstance:第2章中有一個* section *,名爲「Type Basics」,(實際上是p15)。從描述中推斷並不難。 – Jon

+0

@Jon編輯它不是。它用來說章。 –

回答

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 

也就是說,如果你不知道該類型的id你就不能通過閱讀調用.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

有些語言不能創建與int內置的內容類似的類型。在C#中,可以創建具有'int'(這是System.Int32的同義詞)的所有屬性的類型 - 具有+/-/=操作的值類型。

I.e.在JavaScript中,不能創建另一個Array類型或string類型。在Java中,值類型是(不是?)不存在,所以類似於'int'的類型不能由程序員編寫(Does Java make distinction between value type and reference type)。

1

我相信作者的觀點是,內置類型和自定義類型都是爲了達到類似的目的;保存數據並提供使用該數據的機制。我相信還有一個隱含的參考,那就是內置對象和自定義對象都繼承自System.Object,因此它們有相似的能力(即ToString())。

我不一定同意術語「對稱性」,但這是我的兩分錢的話題。

相關問題