一起學習《C 高階程式設計》1 型別的安全性

2022-07-19 01:45:09 字數 2282 閱讀 2422

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

好了,步入正題:從《c#高階程式設計》第7章運算子和型別強制轉換開始

型別的安全性

型別轉換

首先看一段**:

byte value1=10;

byte value2=20;

byte total=value1+value2;

console.writeline(total);

錯誤 :    無法將型別「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 高階程式設計》之泛型 1建立泛型類

net自從2.0版本開始就支援泛型。閒話休提,馬上來看下非泛型的簡化鍊錶類,它可以包含任意型別的物件。linkedlistnode.cs中 在鍊錶中,乙個元素引用另乙個元素,所以必須建立乙個類,將其封裝在鍊錶中,並引用下乙個物件。1 public class linkedlistnode27 8pu...

C 學習(一)型別轉換

1.型別轉換按方式分為隱式轉換和顯式轉換。隱式轉換 由編譯器自動完成,無需使用者干預。顯式轉換 採用一定的形式進行轉換 型別名 資料 c中 型別名 資料 2.關於轉換建構函式 建構函式的一種,主要用於型別轉換,格式嚴格規定為單引數建構函式。例 complex類 complex double r in...

Swift程式語言學習1 3 型別安全和投機型

swift 是型別安全 type safe 語言。型別安全的語言可以讓你清楚地知道 被處理值型別。假設你需要乙個 string。你絕對不能進去乙個不小心傳球int。因為 swift 它是型別安全,因此,這將是型別檢查的編譯 type checks 並把不匹配的型別標記為錯誤。這能夠讓你在開發的時候盡...