国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

對枚舉類型、結構類型的一些認識

2019-11-17 02:17:27
字體:
來源:轉載
供稿:網友

對枚舉類型、結構類型的一些認識

什么是枚舉

枚舉(enumeration),就是一組字面(單詞),每個字面對應一個字面值。

枚舉有什么用處

例如,需要把一年四季在程序中表示出來,可能會用0,1,2,3,分別表示一年四季中的春、夏、秋、冬。這樣不能直觀的表示出是哪個季節,另外這樣的代碼不能成為健壯的代碼。假設,我們在程序中定義了一個int類型的變量seaSon,用它來存入季節。此時,可以把超出定義四季范圍內的int類型數字賦值給seaSon.

int seaSon=5; //這行代碼是合法的,不會報錯。但是,5代表一年四季中哪個季節?

枚舉類型,就可以解決這些問題。

怎么定義枚舉

enum  Season{    SPRing,Summer,Fall,Winter;  //Spring=0,Summer=1,Fall=2,Winter=3.默認第一個成員的字面值為0                                                //剩下的成員,按前面的成員字面值增加1.(第一個除外,它默認是0)}enum Season{     Spring=1,Summer,Fall=4,Winter; //此時Spring=1,Summer=2,Fall=4,Winter=5;}

默認情況下,枚舉中的字面值為int類型,我們可以改為其他整數類型。例如:short,byte,sbyte,ushort,int,uint,long,ulong.

enum Season: short{Spring,Summer,Fall,Winter}  //將字面值改為short類型

怎樣使用枚舉類型

enum Season{     Spring,Summer,Fall,Winter;}Season colorful=Season.Fall;Season  colorful_1=Season.Summer;      //初始化枚舉類型的變量時,只能賦給枚舉中定義的值。

適用于枚舉的運算符

因為枚舉中的字面值只能為整數類型,所以適用于整數類型的運算符都適用于枚舉類型。(bitwise、shift除外)。

Static void doWork(){      Season first=Season.Spring;     for(int i=0;i<4;i++)    {     Console.WriteLine(first);     //依次輸出Spring,Summer,Fall,Winter.        first++;       //自增運算符    }     Console.WriteLine(first);   //此時first超越了枚舉定義的范圍,此時f輸出4。       }

什么是結構

跟類很相似,有自己的字段,方法,構造方法。

結構有什么用處

當一個類中存放的數據非常少,此時創建這個類所消耗的內存資源與它所存的數據不成比例。此時,我們可以考慮用結構來代替類。因為結構是值類型,存放在棧上,就減少了內存的開銷。

怎樣定義結構

structure Time{ private int hours,minutes,seconds;public Time(int hh, int mm,int ss){       this.hours=hh;      this.minutes=mm;     this.ss=ss;}pulbic int Hours(){      return this.hours;}}

結構與類的區別

結構與類的區別有以下兩種:

1.不能自己定義默認的構造方法.(沒有參數的構造方法)。以下代碼,如果是類,不會報錯。

structure Time{    public Time(){                        //會報錯,結構類型不允許自己定義默認的構造方法。}}

因為,編譯器在編譯時,如果發現類中沒有構造方法,就會自動生成一個。如果類中有構造方法,就不會自動生成。編譯器不關結構中有沒有構造方法,都會自動生成構造方法。與類中的默認構造方法一樣,結構中的構造方法,會把結構中的字段根據所對應的類型初始化為null,0,false.可以通過非默認構造函數改變字段值。初始化結構中的字段,必須全部初始化。

struct Time{    private int hours,minutes,seconds;         public Time(int hh, int mm){               this.hours=hh;              this.minutes=mm;              //會報錯,seconds沒有初始化}}

2.在類中,我們可以定義字段時初始化,但是在結構中不可以。

struct time{ private int hours=0;  //報錯,定義時不能初始化 private int minutes; private int seconds;}

理解結構初始化

Time now=new Time();   //我們創建了一個結構類型的對象now。new這個關鍵字調用了Time結構的                                       //默認構造函數,把它的字段初始化為0.                                     //因為結構是值類型,我們也可以這樣:                                    //Time now;         //但是此時,訪問now中的任意成員,都會報錯。因為沒有初始化now中的字段,它們都是         //uninitialized狀態。

我們創建了一個結構類型的對象now。new這個關鍵字調用了Time結構的默認構造函數,把它的字段初始化為0. 因為結構是值類型,我們也可以這樣: Time now; 但是此時,訪問now中的任意成員,都會報錯。因為沒有初始化now中的字段,它們都是uninitialized狀態。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 江津市| 天镇县| 垫江县| 册亨县| 海丰县| 瑞丽市| 彰化县| 东城区| 家居| 玉树县| 三明市| 万盛区| 甘洛县| 秦皇岛市| 遂昌县| 信丰县| 浦北县| 海口市| 金溪县| 泰州市| 清涧县| 徐闻县| 丹阳市| 十堰市| 外汇| 凤凰县| 怀柔区| 贵定县| 邯郸县| 滁州市| 丘北县| 大名县| 独山县| 临武县| 华宁县| 克拉玛依市| 义马市| 盐源县| 金门县| 萨迦县| 潮安县|