C 6 9的部分新特性

2021-10-22 22:34:18 字數 3527 閱讀 1860

加粗是個人認為對一般的應用程式比較有用的。

1.唯讀屬性

屬性使用lambda

舊: public string fullname }

public string fullname

2.using static

舊 :mystaticclass.staticmethod();

新:命名空間中新增using static mystaticclass

在後續使用mystaticclass的方法時可以直接寫 mystaticclass

3.null條件運算符號

舊:if( obj != null)

新:name = obj?.name; 如果obj為null 返回null給到name

name = obj?.name ?? 「張三」 如果obj為null 返回"張三"給到name

4.字串內插

舊:string sql = 「select * from where id = '」+ id + " 』 ";

新:string sql = $"select * from where id = ' 』 ";

5.異常篩選器

try{}

catch(exception ex) when( ex.message.container(「error0001」))

6.nameof表示式

string objstring = 「ee」;

nameof(objstring )獲取objstring 的類名 「string」

7.屬性改變事件

典型的訂閱模式

a 繼承inotifypropertychanged

類中宣告乙個事件

public event propertychangedeventhandler propertychanged;

屬性set呼叫 propertychanged 事件

8.使用索引器關聯初始化集合

dictionary messages = new dictionary ,,

};1.out變數 可以直接傳參時申明,可以使用var

int.tryparse(「123」,out var resultint)

2.元組 //傳輸時使用方便

(int al,int beta) nameletters=(「a」,「b」);

nameletters.al=「aaa」;

public double x

public double y

建構函式: public point(double x,double y) => (x,y) = (x,y);

3.棄元

作為佔位符

var (,a,b) = (「1」,「2」,「3」);

4.模式匹配

}在switch中

switch(i)

5.本地函式

public static string localfun(string param)

}6.預設表示式

funwhereclause = default(fun);

funwhereclause =default;

int i = default; //直接獲取預設值

string s = default;

7.命名引數

method(param2:「b」,param1:「a」); //傳參指明引數名字

8.訪問修飾符

public:公有的,是型別和型別成員的訪問修飾符。對其訪問沒有限制。

internal:內部的,是型別和型別成員的訪問修飾符。同乙個程式集中的所有類都可以訪問

private:私有的,是乙個成員訪問修飾符。只有在宣告它們的類和結構中才可以訪問。

protected:受保護的,是乙個成員訪問修飾符。只能在它的類和它的派生類中訪問。

protected internal:訪問級別為 internal 或 protected。即,「同乙個程式集中的所有類,以及所有程式集中的子類都可以訪問。

private protected:訪問限於包含的類和當前程式集中派生自包含的類。

10.throw表示式

可以放到表示式中,比如:

string arg = args.length>=1? args[0] : throw new exception(「argument」);

11.通用的非同步返回型別

valuetask tasks = func();

await foreach(var item in task )

12.數字文字語法改進

int i = 100_000; //可以用下劃線間隔數字

1.readonly成員

主要應用於結構體,不多寫。

2.預設介面方法

現在可以將成員新增到介面,並為這些成員提供實現。

一頭霧水,啥子作用,搞個和abstract class差不多的介面?

3.using 宣告

舊:using (var file = new system.io.streamwriter(「writelines2.txt」))

新:using var file = new system.io.streamwriter(「writelines2.txt」);

4.非同步流

它是用 async 修飾符宣告的。

它將返回 iasyncenumerable。

該方法包含用於在非同步流中返回連續元素的 yield return 語句。

5.非同步可釋放

語言支援實現 system.iasyncdisposable 介面的非同步可釋放型別。

可使用 await using 語句來處理非同步可釋放物件。

6.null合併複製

c# 8.0 引入了 null 合併賦值運算子 ??=。 僅當左運算元計算為 null 時,才能使用運算子 ??= 將其右運算元的值分配給左運算元。

1.記錄

不可變的引用型別,person例項化後不能修改。

public record person

public string firstname

public person(string first, string last) => (firstname, lastname) = (first, last);

}2.僅限init的資源庫

3.頂級語句

舊:using system;

namespace helloworld}}

新:using system;

console.writeline(「hello world!」);

C 69 自定義記憶體管理

問題 new關鍵字建立出來的物件位於什麼地方?這個兩個是操作符,意味著可以進行操作符過載。也可以改變記憶體分配方式!操作符過載注意 1.不推薦全域性過載 2.建議針對具體的類進行區域性過載 3.針對類的成員函式,過載new,delete這樣的函式預設是靜態成員函式 靜態儲存區中建立動態物件 clas...

Rails2的部分新特性

大多數常見的異常都可以統一處理,而不是每個需要單獨的處理。通常情況下,你只需要覆蓋rescue action in public方法,來進行統一的異常處理即可。但是你也有可能需要使用自己的case語句來處理特定場合的異常。因此我們現在提供了乙個類級別的巨集叫做rescue from,你可以使用它來宣...

Rails2的部分新特性

大多數常見的異常都可以統一處理,而不是每個需要單獨的處理。通常情況下,你只需要覆蓋rescue action in public方法,來進行統一的異常處理即可。但是你也有可能需要使用自己的case語句來處理特定場合的異常。因此我們現在提供了乙個類級別的巨集叫做rescue from,你可以使用它來宣...