加粗是個人認為對一般的應用程式比較有用的。
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,你可以使用它來宣...