程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> [C#學習筆記]Nullable類型,C#溢出檢查,typeof運算符和運算符的重載

[C#學習筆記]Nullable類型,C#溢出檢查,typeof運算符和運算符的重載

編輯:C#入門知識

 1)Nullable類型 一個Nullable類型就是基本類型加上一個“是否為null指示器”的合成類型。對於一個類型,如果既可以給它分配一個值,也可以給它分配null引用(表示沒有任何值),我們就說這個類型是可以空的。因此,可空類型可表示一個值,或表示不存在任何值。例如,類似String的引用類型就是可空類型,而類似Int32的值類型不是可空類型。由於值類型的容量只夠表示適合於該類型的值,因此它不可為空。 有些人認為int型變量的值為0就表示空,這是不對的,0也是它的值,而並不表示空。 看下面的代碼演示:   static void Main(string[] args)          {              //int n = null;              //當直接給int類型賦值null時,編譯器報錯“無法將Null型轉化為int型,因為它是一種不可以為null型的類型”              int? oneValue = null;              //定義Nullable類型和定義非Nullable類型非常相似,關鍵在於類型後面的修飾符“?”              //int? oneValue = 10;              if (oneValue.HasValue)//使用Nullable類型的HasValue屬性來判定是否有值存儲              {                  //int nNum = oneValue;                  //如果嘗試獲取oneValue的值,編譯器就會報錯                  Console.WriteLine(oneValue.Value);              }              else              {                  Console.WriteLine("oneValue的值為空!");              }          }  2)C#的溢出檢查   當一種整型轉換到另一種整型,這個過程取決於溢出檢查上下文。checked關鍵字用於對整型算術運算和轉換顯式啟用溢出檢查,而unchecked關鍵字則用於取消整型算術運算和轉換的溢出檢查。 ①啟用溢出檢查:當操作數的值在目標類型的取值范圍內,則轉換成功,否則將要拋出異常。 看下面代碼演示:   class TypeConvert      {          static void Main(string[] args)          {              TypeConvert typeConvert = new TypeConvert();              typeConvert.DoSomething();          }            public void DoSomething()          {              //MyInt的值為2147483647              try              {                  int MyInt = int.MaxValue;                  byte MyByte = checked((byte)MyInt);              }              catch(OverflowException)              {                  throw;              }          }      }    在代碼中MyInt的最大值是2147483647,在強制轉換為byte類型後,由於byte的取值范圍為0-255,在這裡使用了checked關鍵字進行了溢出檢查,這裡的byte型MyByte型無法容納遠大於其容量的值而拋出異常。   ②取消溢出檢查 在類型轉換的過程中不檢查數據是否超過目標數據類型的最大值,意味著類型轉換永遠是成功的。如果源數據類型的取值范圍大於目標類型的取值范圍,超過的部分將會被截取掉;如果源數據的取值范圍小於目標類型的,轉換後將使用符號或者零填充至與目標類型的大小相等;如果等於,則直接轉換成目標類型 看實例代碼如下:   class TypeConvert      {          static void Main(string[] args)          {              TypeConvert typeConvert = new TypeConvert();              typeConvert.DoSomething();          }            public void DoSomething()          {              //MyInt的值為2147483647              try              {                  int MyInt = int.MaxValue;          //byte MyByte = unchecked(byte)MyInt;          //這樣寫與下面的寫法一樣,區別就是生命了關鍵字                  byte MyByte = (byte)MyInt;          //這裡沒有使用溢出檢查,結果也不會拋出異常。但是轉換的結果是有問題的,是byte類型的最大值255,與原始的值相差很大。              }              catch(OverflowException)              {                  throw;              }          }      }      ③typeof運算符 typeof是一元運算符,用於返回任意一個類型的類型信息   typeof運算符的語法如下:  Type type=typeof(類型);   示例代碼演示如下:     class Program      {          static void Main(string[] args)          {              Type t = typeof(Program);              Console.WriteLine("方法:");                MethodInfo[] methodInfo = t.GetMethods();              //返回該Type類型的所有公共方法              foreach (MethodInfo mInfo in methodInfo)              {                  Console.WriteLine(mInfo.ToString());              }                Console.WriteLine("成員:");              MemberInfo[] memberInfo = t.GetMembers();              //返回該Type類型的所有公共成員              foreach (MemberInfo mInfo in methodInfo)              {                  Console.WriteLine(mInfo.ToString());              }                Console.ReadKey();          }      }        運行結果如下圖:       ④運算符的重載 運算符重載只能應用於類或結構。要重載一個運算符,可以聲明一個名為operator X的方法並實現它,如operator +和operator -,一元運算符和二元運算符都可以被重載,相應地,重載方法分別帶一個或者兩個參數(類或者結構類型),其語法為:   //一元運算符的重載        public static 自定義類型 operator 要重載的運算符(類型)        //二元運算符的重載        public static 自定義類型 operator 要重載的運算符(類型1,類型2) 注意:所有運算符的重載均是靜態的方法,必須得用public修飾 代碼示例如下:   class Program      {          public int Value { get;set; }            static void Main(string[] args)          {              Program o1 = new Program();              o1.Value = 10;              Program o2 = new Program();              o2.Value = 20;                Program o3 = o1 + o2;              Console.WriteLine(o3.Value);              Console.ReadKey();          }            /// <summary>          /// 這裡為Program類重載了“加(+)”運算符實現了兩個對象的相加的功能,運算符的重載提高了編程的便利性          /// </summary>          /// <param name="o1"></param>          /// <param name="o2"></param>          /// <returns></returns>          public static Program operator +(Program o1, Program o2)          {              Program o = new Program();              o.Value = o1.Value + o2.Value;              return o;          }      }       

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved