作者jhchou (jhchou)
看板C_Sharp
標題Re: [問題] 觀念請教 關於class
時間Fri Feb 5 02:57:10 2010
※ 引述《QQ29 (我愛阿蓉)》之銘言:
: 學習C#時
: 目前觀念上是 class內function宣告和實作 要在一起寫...
: 不過我在ValueType 這 class的檔案中發現
: public abstract class ValueType
: {
: protected ValueType();
: public override bool Equals(object obj);
: public override int GetHashCode();
: public override string ToString();
: }
: 都沒有去定義
: 三個問題想請問
: 1.這個ValueType似乎是最上層的class 給別人繼承的
: 為啥他的function都要灌上override而不是virtual
: 我自己照他這樣寫他都會跟我講沒有定義 而不會過
: 2.第二個問題就是既然他這樣寫 也看不出來他繼承了誰 為什麼可以override?
: 且為啥可以不用寫定義 ......
這兩個問題其實是同一個問題
原因很簡單,C#所有class,都會自動繼承System.Object這個class
而Equals,GetHashCode,跟ToString是定義在System.Object
至於為啥三個函式沒定義,因為你看到的不是原始檔,而是來自中繼資料
http://hi.baidu.com/sevenxue2008/blog/item/2adcc295c9355614d31b7082.html
這個連結你可以看一下,裡面有ValueType Class的定義
: 3.我以為ValueType是給所有value type繼承的
: 但是我寫int a; 跳進去int的class 發現是Int32, 他後面繼承了一堆interface卻沒有既
: 成ValueType
: 這是為什麼呢?
Int32其實是一個structure,在C#中,所有structure都是繼承自ValueType
這是compiler自動幫你做的繼承,所以你看定義看不到
: 目前書上也沒有特別對這些解釋 自己trace發現的問題
你可能書還沒看完,不然可能要換本書了,
因為任何class都會繼承System.Object是很重要的觀念,
幾乎任何一本講.NET(或任何使用.NET的語言)的書都應該要提到,
而且還應該繼續告訴你System.Object裡面這三個函式的用途以及改寫時機
如果你的書講.NET的觀念講比較少的話,最好再去找另一本來看
C#雖然很多語法跟C++很像,但是因為C#是純.NET語言,
很多東西其實是跟.NET的設計還有架構有關,不能直接用C++的觀念想
最好還是找本書從頭到尾把它看一遍比較保險
: 請教一下各位
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.217.228.253
※ 編輯: jhchou 來自: 61.217.228.253 (02/05 03:00)
推 F23ko:「System.Object裡面這三個函式的用途以及改寫時機」 02/05 08:53
→ F23ko:請問是指用覆載取代掉原本的函式嗎? 02/05 08:55
→ jhchou:是的 02/05 09:28
推 QQ29:有推薦的書籍嗎 適合算懂C++ 轉C#的 人看得@@ 02/05 10:18
→ remmurds:"所有類別都繼承自System.Object" 這有這麼難懂嗎= =? 02/05 12:36
→ remmurds:除非你不知道OO為何物 不然這跟你先前是學哪種語言一點關 02/05 12:36
→ remmurds:系都沒有 02/05 12:36
→ QQ29:不是不懂那個 是說想問問有沒推薦的書籍 想比較系統的看 02/05 13:22