C#學習第五天

 

C#中的 is as

is  可用於任何類型。

例如

int a = 10;

a is Object ==true;

 

Object o = 10;

o is int ==true;

o = person;

o is int == false;

 

as 右側類型必須爲引用類型或可空類型。

as操作如果失敗,不拋出異常,而是返回null;

 

結構(struct)棧變量:

結構有如下與類不一樣的地方:

1、結構struct不能聲明默認構造方法(即無參數構造方法)。

struct Time
{
   Time()//錯誤!結構不能聲明默認構造方法
  {
  }
}

 

2、在結構自定義構造方法內,所有實例字段必須初始化。靜態字段具有默認值並且靜態字段可以賦予初始值。

3、編譯器爲結構提供的默認構造方法被系統自動調用後,會初始化所有實例字段,初始值爲他們的默認值。即 0 null false等。

4、結構中所有的實例字段不能包含初始化值。例如 private int id=0;//錯誤。實例初始化必須放到構造方法中(默認構造方法由系統調用,自定義構造方法由用戶調用)。個人認爲,之所以結構這樣規定,是因爲結構是類似於int,boolean、char等的簡單類型,防止使用未初始化的變量,如果結構允許存在別初始化的實例字段,將導致使用了未初始化結構變量的錯誤。


struct Time
    {
       // public int ID=100; 結構中不能存在實例字段初始值
        public const String name = "Time";//常量正常存在,且不能修改
        public static int stId ;//結構中static字段可以存在初始值,默認爲0 false null
        private int hour;
        public int miniute;      
       
        /*
         * 結構不能包含顯示的默認構造方法(無參數構造方法)
         * 如果不提供結構自定義構造方法,那麼編譯器自動添加默認構造方法並初始化所有實例字段,這也是結構不能存在實例初始化字段的原因
        public Time()
        {
 
        }*/

        /*
         * 在結構自定義構造方法中,所有字段必須初始化(無論字段訪問級別如何)
         */
        public Time(int hour)
        {
            this.hour = hour;
            miniute=10;
            //ID = 001;
        }

    }


使用結構:

  //使用結構
       public static  void test()
        {
            Time time = new Time();//初始化
            Console.WriteLine(time.miniute);//打印出0
            Time time2;//未初始化
           //因爲是棧變量,所以聲明方式可以和其他棧類型int,boolean等一樣
           // Console.WriteLine(time2.miniute);//Error。字段未初始化

            time2.miniute = 50;
            Console.WriteLine(time2.miniute);//ok。字段已賦值

           //上面兩種結構變量聲明方式所產生的值均在棧上。

            int a = new int();//初始化
            Console.WriteLine(a);//0
            int b;//未初始化
           // Console.WriteLine(b);error:使用了未賦值的變量
            b = 10;
            Console.WriteLine(b);//OK


        }



結構複製:值

            time.miniute = 38;
            Time tm = time;//複製值。注意time必須使用構造方法的方式聲明
            time.miniute = 28;//不會改變tm中棧變量的值
            Console.WriteLine(tm.miniute);//打印38.


 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章