第十四講 列舉
列舉型別是c#中又一種輕量級的值型別,c#用列舉來表達一組特定的值的集合行為,比如windows窗體可選的狀態,按鈕控制項的風格等。下面的程式偽碼展示了典型的列舉用法:
public enum writingstyle
class essay}}
注意上面的列舉符號classical,
modern,
elegant之間用逗號「,」而不是分號「;」來分隔。其中最後乙個列舉值elegant之後可以省去逗號分隔符。
和結構一樣,c#中的列舉不允許也有自己的繼承父類system.enum,同樣的,列舉不能被繼承,也沒有abstract一說。system.enum類為列舉型別提供了很多好用的功能操作。比如我們可以通過getname方法得到我們宣告列舉值的字串符號表示。下面的例子顯示了一些比較常用的操作:
using system;
public enum writingstyle
class test }
其中的最後一行輸出了system.int32,這是怎麼回事?我們知道int是system.int32的簡寫形式,難道我們的writingstyle列舉型別和整數int型別有什麼關係嗎?
是的,c#的列舉和整數值之間嚴格區分,比如我們就不能在上面的**中作dw=1類似的賦值。但每個列舉值卻的的確確都有乙個整數型別的數值相對應,而且可以轉換,只不過這種轉換必須用明晰的轉型語法來表達。我們知道在c#中整數型別有byte, sbyte, short, ushort, int, uint, long ,ulong共八種,那麼c#的列舉值對應的是哪一種整數型別呢?它關係到我們的列舉型別能夠容納的列舉值的數量。實際上c#列舉型別支援這八種整數型別的任何一種,根據我們的需要,可以在宣告列舉型別的時候來指定,如「public enum writingstyle :byte」就指定了它的列舉值的整數型別為byte。該型別可以通過上面所述的enum.getunderlyingtype方法來獲得。如果不明確指定,c#將預設採用int型別作為列舉數值的型別。既然列舉值實際上也是一種整數值,那麼它的大小呢?讀者將下面的**加在上面的main函式內,就可看到結果了。
foreach(object obj in enum.getvalues(typeof(writingstyle)))
上面的**將產生以下輸出:
classical : 0
modern : 1
elegant : 2
可以看到,c#預設地從0起為我們的列舉值賦了乙個隱含的值。當然,我們也可以自己為列舉值指定數值:
public enum writingstyle
我們甚至可以象下面這樣,前提是我們必須保證編譯時能夠計算出他們各自的數值。
public enum writingstyle
列舉值也擁有象整數那樣的比較,邏輯,算術等操作行為,看下面的例子:
using system;
public enum writingstyle
class test }
當計算出來的數值等於某個列舉值的實際大小,那麼顯示的是該列舉值的符號名稱,否則顯示的將是整數值。
第十四講 模組
1.模組 模組化指將乙個完整的程式分解成乙個個的小模組 通過將模組組合,來搭建出乙個完整的程式 模組化的優點 方便開發 方便維護 模組可以復用 模組的建立 在python當中乙個py檔案就是乙個模組 在乙個模組中引入外部模組 import模組名 模組名就是py檔案 可以引入同乙個模組多次,但是模組的...
MFC孫鑫第十四講UDP
srv include include void main if lobyte wsadata.wversion 1 hibyte wsadata.wversion 1 socket socksrv socket af inet,sock stream,0 socket socksrv socket...
機器學習基石第十四講筆記
lecture 14 regularization 規則化 14 1 規則化假說集 regularization the magic 從多次的hypothesis set走回到低次的hypothesis set,避免了overfit的發生。ill posed problems 指有很多的函式都滿足s...