作者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)
1F:推 F23ko:「System.Object里面这三个函式的用途以及改写时机」 02/05 08:53
2F:→ F23ko:请问是指用覆载取代掉原本的函式吗? 02/05 08:55
3F:→ jhchou:是的 02/05 09:28
4F:推 QQ29:有推荐的书籍吗 适合算懂C++ 转C#的 人看得@@ 02/05 10:18
5F:→ remmurds:"所有类别都继承自System.Object" 这有这麽难懂吗= =? 02/05 12:36
6F:→ remmurds:除非你不知道OO为何物 不然这跟你先前是学哪种语言一点关 02/05 12:36
7F:→ remmurds:系都没有 02/05 12:36
8F:→ QQ29:不是不懂那个 是说想问问有没推荐的书籍 想比较系统的看 02/05 13:22