C# - 自訂型別enum, class, interface, struct

在C#中,struct、class、enum、interface是可自訂的型別,這些自訂型別通常用來為自己客製化一個資料結構,以下簡單介紹各種自訂型別:


class

class為使用者自定義的一種資料結構,內部包含了Member,Member可為Method、Field、Property,class可為Base Class或繼承Base Class的Derived Class,一個Derived Class只能繼承一個Base Class,但可實作多個Interface。


struct

struct與class類似,資料結構與class相比較小,但struct為實值型別,傳struct值時為Call By Value,與傳送int、char、double等一樣,struct提供與class一樣多的Member,但如果用到許多種Member導致資料結構變得複雜,那就需要考慮改成class,另外,struct不提供繼承的功能,但可實作interface,所以Member不能宣告成protected,下圖為Member宣告成protected時編譯產生的錯誤:

interface

interface也類似class,Member較少,主要用於多型與多重繼承的應用上,interface內Member只有Method、Property、Indexer(索引子)、Event,interface內所定義的Member不能再interface內部實作,必須在實作這個interface的class或struct中實作這些Member,此外,interface預設Member會宣告成public,所以使用private或protected等修飾詞在編譯時會發生錯誤:


enum

enum為使用者定義的列舉清單,其內容的資料型態只能為整數型別(int, long, short...),enum預設資料型態為int,內容預設對應值從0依序往後,enum內部不允許加上其他修飾詞(public, protected, static...),另外較特別的是,enum內容類似string但寫法又不須加上雙引號(""),在內容後面可加上指定對應的整數值。


下表為各自訂型別內Member的存取範圍:


Member所屬型別
Member預設存取範圍
Member可宣告的存取範圍修飾詞
enum
public
(全為public, 其餘修飾詞編譯時會出現錯誤)
class
private
public, protected, internal, private, protected internal
interface
public
(全為public, 其餘修飾詞編譯時會出現錯誤)
struct
private
public, internal, private

參考來源:

留言