酒井~這難解的三角習題中,誰才是真命天子??!!
分手擂台第一對要上場的是 - Class 與 Struct
這一切酒井是Class的命運捉弄,抑或是Struct的因果循環的報應呢?
讓我們繼續看下去~
Class無庸置疑是最常使用的type
可以作為資料傳遞的物件
也可以在裡面寫一些方法,有的沒的
事實上,Struct也可以做到上面這些事
但是Struct無法宣告空的建構子,已不能繼承
Struct說真的還蠻少見,自從大學畢業後就沒見過他了,事實上我還沒有寫過Struct
我看完這一小章節的結論就是:用Class,不要用Struct
其實書上是沒有講得那麼明顯,書中列舉了下列四點使用Struct的時機
當下列4個條件完全吻合時,才會建議你用Struct
int i = 123;
// The following line boxes i.
object o = i;
我也不知道我在寫啥,原文如下
defining a struct unless the type has all of the following characteristics:
- It logically represents a single value, similar to primitive types (int, double, > > etc.).
- It has an instance size under 16 bytes.
- It is immutable.
- It will not have to be boxed frequently.
In all other cases, you should define your types as classes.
結論先講完了,接下來探討一下Class與Struct到底有啥不一樣的地方
Class與Struct最大的差異就是
Class是Reference type
Struct是value type
所以本章節大部分的文章都在描述Reference type 與value type有什麼不同
看到這邊時我一直很糾結到底要先講Reference type 與value type
還是先講Class 跟 Struct如何選擇?
Reference type 與value type希望明天能讀完
除此之外,Class與Struct除了這個之外還有啥不一樣的地方,請看下表
Class | Struct |
---|---|
Reference type | value type |
可繼承 | 不可繼承 |
可變更 | 不可變更 |
不能有預設建構子 |
這裡的Class指的是abstract class
也對,Class與Interface本來就是兩個截然不同的東西
選擇上有甚麼好困擾的?
但是abstract class與Interface都可以宣告方法給子/實作類別實作
選擇上,究竟是要繼承abstract class好
還是實作Interface呢?
先就我所知道的,列表一下Abstract Class 與 Interface的差異吧
Abstract Class | Interface |
---|---|
可以寫方法內容 | 只能宣告方法 |
可以有各種方法 | 只宣告public方法 |
單一繼承 | 多重繼承 |
除了繼承輸給Interface之外,class還是贏面大
可以寫預設的方法,又可以讓子類別overwrite
判斷實作類別與父類別/Interface之間的關系決定
public abstract class Animal{
...
}
public class Dog : Animal{
...
}
如果無法判斷,書中建議使用class
favor defining classes over interfaces.
用設計良好的class取代interface可以讓組件從實做中脫鉤?
use abstract classes instead of interfaces to decouple the contract from implementations.
Abstract classes, if designed correctly, allow for the same degree of decoupling between contract and implementation.
那甚麼時候用interface呢?
當你要提供一個多功能value type時
public struct Int32 : Icomparable, IFormattable, IConvertible{
...
}
話雖這麼說,但M$的.NET Framework還是很多interface....
魯妹又強迫提供一個新故事了
那天來了一個不知道身體哪裡有問題的美國人
美國人:窩會縮一點中文
同事(鬆一口氣):好,請問你哪裡不舒服
美國人:窩聽噗懂@@