一起學習《C#進階編程》1--類型的安全性

來源:互聯網
上載者:User

標籤:style   ar   color   os   使用   sp   strong   on   資料   

  感覺寫隨筆第一天就遇到了困難,感覺好費時間啊,回宿舍就得8點多,然後只能看一點書。之後寫隨筆,首先得回憶,然後組織,最後打字。還有就是宿舍迎來的斷網的日子,特別不方便,只能第二天去公司發。本人目前是.net開發實習生,之前零零散散學了些.net知識,如今打算好好鞏固下C#,看了《C#進階編程》後感覺知識龐大,還有好些分支沒掌握,雖然不知道有些東西值不值得學習,還是先學著吧。

好了,步入正題:從《C#進階編程》第7章運算子和類型強制轉換開始

類型的安全性

類型轉換

首先看一段代碼:

Byte value1=10;

Byte value2=20;

Byte total=value1+value2;

Console.WriteLine(total);

初看似乎沒有錯誤,但此時VS會彈出下面一段錯誤提示:

 

  錯誤 :    無法將類型“int”隱式轉換為“byte”。存在一個顯式轉換(是否缺少強制轉換?)      

這是因為byte只能為8位,兩個byte類型相加很容易得到超出8位大小的數值,這體現了C#類型的強安全性;

 

這時,把Byte total=value1+value2;

改為Byte value3 = (byte)(value1 + value2);  //顯示轉換

或者Int value3 = value1 + value2;   //隱士轉換

 

以上就用到了兩種類型轉換,隱式轉換顯式轉換

隱式轉換:

就是從較小的資料類型可以轉換為較大的資料類型

注意:

無符號的變數可以轉換為有符號的變數,只要無符號的變數值在有符號的變數值內即可

 

·要類型轉換中的可空類型(類型符後面帶“?”,可空類型就是允許為Null的類型):

·可空類型轉換規則遵循非可空類型的轉換規則,即較小類型向較大類型轉換

·非可空類型可以隱式轉換為可空類型,但可空類型不能隱式轉換為非可空類型。這是因為可空類型值允許為null,但非可空類型不允許為null。

 

 

顯式轉換:

就是強制轉換,要說的就是數值溢出的問題

例如:

    long val=3000000000;

    int i=(int)val;

算術溢位,可以用unchecked和checked檢測

預設情況下是unchecked,即對數值溢出不檢測

使用checked,會迫使運行時拋出異常:

    long val=3000000000;

    int i=checked((int)val);

或者checked用{}包住需要驗證溢出的語句

    Checked

    {

        int i=checked((int)val);

    }

 

後面還會用異常 try}{} catch{}來引入異常處理

 

之前提到的,可空類型轉換為非可空類型,必須用到顯示轉換。如int?轉換為int。這是因為可空類型允許為null。

    如果可空類型為null,轉換為非可空類型,就會拋出異常。

    int? a=null;

    int b=(int)a;       //將拋出異常

 

如果需要在數字和字串之間轉換,可以試用.Net類庫中提供的方法:ToString();

    int i=10;

    string s=i.ToString();

 

關於類型轉換,.Net還提供了兩種安全帶轉換方法:Parse()和Convert方法。

    例如:

    string someString = "22";

     int value1 = Int32.Parse(someString);

     int value2 = Convert.ToInt32(someString);

 

還提到了一點,就是裝箱拆箱

    裝箱,就是把實值型別轉換為參考型別Object類型。而拆箱就是把Object類型重新轉換為實值型別。

    例:

    int myInt=10;

    object myObject=myInt;  //裝箱,實值型別都可以轉換為引用Object類型

    int myInt2=(int)myObject;   //拆箱,裝箱的相反過程,需要強制轉換

 

    裝箱,拆箱可用於:比如一個方法需要參考型別參數,此時把實值型別裝箱成為參考型別,之後可拆箱為實值型別。

 

    23:37,今天先寫到這了,由於看書的時間本身就比較晚,之後寫隨筆的進度比較慢,遠遠落後於看書的進度。留下了點小尾巴,是關於 比較對象之間的相等性 的。

    明天接著寫運算子的重載。

  以後會爭取每天寫一點C#學習的內容分享,也希望大家一起努力,把C#發揚光大,哈哈。歡迎多多指教!

一起學習《C#進階編程》1--類型的安全性

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.