看板 C_Sharp 關於我們 聯絡資訊
※ 引述《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