結構(struct)雖是實值型別,但完整支援介面實作,這讓結構能參與多型設計,同時保有實值語意。
public interface IBook
{
DataSet QueryAll();
}
public struct BookComponent : IBook
{
public DataSet QueryAll()
{
// 實際資料存取邏輯
return new DataSet();
}
}
// 多型使用
IBook book = new BookComponent();
var ds = book.QueryAll();
| 特性 | 類別 | 結構 |
|---|---|---|
| 型別分類 | 參考型別 | 實值型別 |
| 記憶體配置 | 堆積 | 堆疊(或內嵌於物件) |
| 繼承 | 支援單一繼承 | 不可繼承其他類別/結構,不可被繼承 |
| 介面實作 | 支援 | 支援 |
| 建構函式 | 無參 + 多載 | 僅能定義有參建構函式,無參由編譯器產生 |
| 解構函式 | 支援 | 不支援 |
| Null 值 | 可為 null | 不可為 null(除非用 Nullable<T>) |
| 複製語意 | 參考複製 | 實值複製(逐欄位) |
| 效能特性 | 適合大型、長壽命物件 | 適合小型、短壽命、高頻建立的資料 |