第八章 運算子和型別強制轉換

2021-08-15 03:40:14 字數 3569 閱讀 8292

1、條件運算子

1.(?:)也稱為三元運算子,是if…else結構的簡化形式。

2. 首先是乙個判斷條件,如果為真,就返回乙個值;如果條件為假,則返回另乙個值。

//語法結構

condition ? true_value: false_value

2、checked和unchecked運算子

作用:開啟或者關閉溢位檢查。

把乙個**塊標記為checked,clr會執行溢位檢查,發生溢位,就丟擲overflowexception異常。

把**塊標記為unchecked,禁止溢位檢查,不會丟擲異常,但如果存在溢位,會丟失資料。

3、is運算子

可以檢查物件是否與特定的型別相容。

「相容」表示物件或者是該型別,或者派生自該型別。

//檢查變數是否與object型別相容

int i = 10;

if(i is

object)

4、as運算子

用於執行引用型別的顯式轉換。

如果要轉換的型別與指定的型別相容,轉換就會成功進行;

如果型別不相容,as運算子就會返回null值。

object o1 = "some string";  

object o2 = 5;

string s1 = o1 as

string; //s1 = "some string"

string s2 = o2 as

string; //s2 = null

5、sizeof運算子

確定棧中值型別需要的長度(單位是位元組)。

對於複雜型別(而非基本型別),使用sizeof,需要將**放在unsafe塊中。

//基本型別

writeline(sizeof(int));

//複雜型別

unsafe

6、typeof運算子

返回乙個表示特定型別的system.type物件。

例如,typeof(string)返回表示system.string型別的type物件。

7、nameof運算子

是新的c#6運算子。

該運算子接受乙個符號、屬性或方法,並返回其名稱。

8、index運算子

是乙個索引運算子。

不需要把整數放在括號內,而且可以用任何型別定義。

var dict = new dictionary();

dict["first"] = 1;

int x = dict["first"];

9、可空型別和運算子

值型別和引用型別的重要區別是,引用型別可以為空,值型別不能為空。

但是,c#型別對映到資料庫時,資料庫中的數值可以為空,此時就需要可空的資料型別。

10、空合併運算子

空合併運算子(??),可以在處理可空型別和引用型別時表示null值得可能性。

注意:

1. 這個運算子放在兩個運算元之間,第乙個運算元必須是乙個可空型別或引用型別;

2. 第二個運算元必須與第乙個運算元的型別相同,或者可以隱式地轉換為第乙個運算元的型別。

11、空值傳播運算子

是c#6的乙個傑出新功能。

//使用空值傳播運算子來訪問firstname屬性,當p為空時,就只返回null,而不會繼續執行表示式的右側

public

void

showperson(person p)

使用空值傳播運算子訪問int型別的屬性時,不能把結果直接分配給int型別,因為結果可能為空。

//把結果分配給可空的int

int? age = p?.age;

//使用空合併運算子,定義另一種結果

int age = p?.age ?? 0;

//結合多個空值傳播運算子

person p = getperson();

string city = null;

if(p != null && p.address != null)

//可以簡化為

string city = p?.address.city;

12、型別轉換

隱式轉換是自動進行的,

只能將較小範圍的資料型別轉換為較大範圍的資料型別,否則,會出現資料丟失的風險。

對於可空型別,有幾點需要注意:

- 可空型別隱式地轉換為其他可空型別;

- 非可空型別隱式轉換為可空型別

- 可空型別不能隱式地轉換為非可空型別,必須進行顯式轉換。

13、裝箱和拆箱

14、比較引用型別的相等性

這是乙個靜態方法,其測試兩個引用是否指向類的同乙個例項,特別是兩個引用是否包含記憶體中的相同位址。

作為靜態方法,它不能重寫。

someclass x, y;

x = new someclass();

y = new someclass();

bool b1 = referenceequals(null, null); //returns true

bool b2 = referenceequals(null, x); //returns false

bool b3 = referenceequals(x, y); //returns false(指向不同的物件例項)

15、比較值型別的相等性

規則:referenceequals()用於比較引用,equals()用於比較值,比較運算子可以看作乙個中間項。例如sa.equals(sb)

16、referenceequals()方法用於比較引用型別,能否將值型別裝箱之後再進行比較?

不能。因為referenceequals()方法在轉換每個引數時,都會被單獨裝箱,這意味著就會得到不同的引用,因此,呼叫這個方法比較值型別沒有什麼意義。

17、運算子過載

18、實現使用者定義的型別強制轉換

第八章 Mysql運算子

算術運算子 符號 表示式形式 作用 x1 x2 加法 x1 x2 減法 x1 x2 乘法 x1 x2 除法 divx1 div x2 同上 x1 x2 取餘 modmod x1,x2 同上 有下表 符號表示式形式 作用 x1 x2 等於 或 x1 x2 不等於 x1 x2 等於 x1 x2 大於 x...

第八章。指標型別轉換

第八章。指標型別轉換 當我們初始化乙個指標或給乙個指標賦值時,賦值號的左邊是乙個指標,賦值號的右邊是乙個指標表示式。在我們前面所舉的例子中,絕大多數情況下,指標的型別和指標表示式的型別是一樣的,指標所指向的型別和指標表示式所指向的型別是一樣的。例十四 1。float f 12.3 2。float f...

強制轉換運算子和型別強制轉換運算子

char b a cout int b endl 在 c 中,型別的名字 包括類的名字 本身也是一種運算子,即型別強制轉換運算子。型別強制轉換運算子是單目運算子,也可以被過載,但只能過載為成員函式,不能過載為全域性函式。經過適當過載後,型別名 物件這個對物件進行強制型別轉換的表示式就等價於物件.op...