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

            什麼是枚舉函數

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

           枚舉有什麼用處this

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

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

  枚舉類型,就能夠解決這些問題。code

 

          怎麼定義枚舉對象

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.blog

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狀態。

相關文章
相關標籤/搜索