C#結構體構造函數的應用
- ///〈summary〉
- ///啟動服務端的參數結構
- ///〈/summary〉
- publicstructSERVER_VIDEOINFO
- {
- ///〈summary〉
- ///通道數據類型,是否支持電話線連接
- ///〈/summary〉
- byte[]m_datatype;
- ///〈summary〉
- ///系統(tǒng)的通道個數
- ///〈/summary〉
- bytem_channum;
- ///〈summary〉
- ///超時等待時間,1-300,單位:分鐘
- ///用來設置超時等待時間,
- 如果m_waittime沒有收到某個用戶的應答信號,
- 切斷和該用戶的連接。
- ///〈/summary〉
- uintm_waittime;
- ///〈summary〉
- ///目前沒有使用
- ///〈/summary〉
- uintm_bufnum;
- publicSERVER_VIDEOINFO(bytechannum,
- uintwaittime,uintbufnum)
- {
- this.m_channum=channum;
- this.m_waittime=waittime;
- this.m_bufnum=bufnum;
- this.m_datatype=newbyte[64];
- }
- };
- ///〈summary〉
- ///啟動服務端的參數結構
- ///〈/summary〉
- publicunsafestructSERVER_VIDEOINFO
- {
- ///〈summary〉
- ///通道數據類型,是否支持電話線連接
- ///〈/summary〉
- fixedbytem_datatype[64];
- ///〈summary〉
- ///系統(tǒng)的通道個數
- ///〈/summary〉
- bytem_channum;
- ///〈summary〉
- ///超時等待時間,1-300,單位:分鐘
- ///用來設置超時等待時間,
- 如果m_waittime沒有收到某個用戶的應答信號,
- 切斷和該用戶的連接。
- ///〈/summary〉
- uintm_waittime;
- ///〈summary〉
- ///目前沒有使用
- ///〈/summary〉
- uintm_bufnum;
- };
/*
說明:C#中結構都有一個默認的不帶參數的構造函數, 用于對結構的字段進行初始化,并且結構的默認構造函數不能被重寫。
C#結構體構造函數之中定義的數組還可以通過構造函數傳參數進行初始化操作!
1和2的作用相同,但是用2的方式定義的話需要選中 “項目屬性/生成/允許不安全代碼"。
以下是來自MSDN
結構與類共享大多數相同的語法,但結構比類受到的限制更多
在結構聲明中,除非字段被聲明為 const 或 static,否則無法初始化。
結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。
由于結構的副本由編譯器自動創(chuàng)建和銷毀,因此不需要使用默認構造函數和析構函數。實際上,編譯器通過為所有字段賦予默認值(參見默認值表(C# 參考))來實現(xiàn)默認構造函數。結構不能從類或其他結構繼承。
結構是值類型。如果從結構創(chuàng)建一個對象并將該對象賦給某個變量,則該變量包含結構的全部值。復制包含結構的變量時,將復制所有數據,對新副本所做的任何修改都不會改變舊副本的數據。由于結構不使用引用,因此結構沒有標識;無法區(qū)分具有相同數據的兩個值類型實例。C#結構體構造函數 中的所有值類型都繼承自 ValueType,后者繼承自 Object。
結構具有以下特點:
結構是值類型,而類是引用類型。
與類不同,結構的實例化可以不使用 new 運算符。
結構可以聲明構造函數,但它們必須帶參數。
一個結構不能從另一個結構或類繼承,而且不能作為一個類的基。所有結構都直接繼承自 System.ValueType,后者繼承自 System.Object。
結構可以實現(xiàn)接口。
C#結構體構造函數可用作可為 null 的類型,因而可向其賦 null 值。
【編輯推薦】