1. 程式人生 > 其它 >C#歷代版本新特性——面試題常用

C#歷代版本新特性——面試題常用

掌握一門語言,當然要掌握它的特性,而隨著C#歷代版本的迭代更替,C#語言也日趨完善,在C#2.0~C#4.0版本所帶來的新的語法特性格外重要。C#的新特性,其本質都是“語法糖”,目的是提升開發效率,在編譯時會被編譯器轉成原始語法。下面按照版本順序依次介紹其中在日常開發中比較常用的部分。

C# 1.0 特性 第1個版本,程式語言最基礎的特性。 Classes:面向物件特性,支援類型別 Structs:結構 Interfaces:介面 Events:事件 Properties:屬性,類的成員,提供訪問欄位的靈活方法 Delegates:委託,一種引用型別,表示對具有特定引數列表和返回型別的方法的引用 Expressions,Statements,Operators:表示式、語句、操作符 Attributes:特性,為程式程式碼新增元資料或宣告性資訊,執行時,通過反射可以訪問特性資訊 Literals:字面值(或理解為常量值),區別常量,常量是和變數相對的

C#2.0新特性

泛型及其相關,匿名方法

泛型

2.0版本的C#語言和公共語言執行時(CLR)中增加了泛型。泛型將型別引數的概念引入.NET Framework,型別引數允許類和方法將一個或多個型別的指定延遲到和護短程式碼宣告並例項化該類或方法的時候。

public class List<T> { }

其中,T就是System.Collections.Generic.List<T>例項所儲存型別的佔位符。當定義泛型類的例項時,必須指定這個例項所儲存的實際型別:

List<string> lst = new List<string>();

泛型允許將一個實際的資料型別規約延遲至泛型的例項被建立時才確定。

泛型主要由兩個優點:

  • 編譯時可以保證型別安全。
  • 不用做型別轉換,獲得一定的效能提升。

泛型方法,泛型委託,泛型介面

除了泛型類之外,還可以使用泛型方法,泛型委託,泛型介面

//泛型委託
public delegate void Del<T>(T item);
public static void Notify(int i) { }
Del<int> ml = new Del<int>(Notify);

//泛型介面
public class MyClass<T1, T2, T3> : MyInteface<T1, T2, T3> { public T1 Method1(T2 param1, T3 param2){throw new NotImplementedException(); } }
interface MyInteface<T1, T2, T3> { T1 Method1(T2 param1, T3 param2); }

//泛型方法
static void Swap<T>(ref T t1, ref T t2){ T temp = t1;t1 = t2;t2 = temp; }
public void Interactive()
{
    string str1 = "a"; string str2 = "b";
    Swap<string>(ref str1, ref str2);
    Console.WriteLine(str1 + "," + str2);
}

匿名方法

匿名方法的實質其實就是委託,函式式編成的最大特點之一就是吧方法作為引數和返回值。匿名方法可以省略引數,編譯時會自動為這個方法按照委託簽名的引數新增。

public delegate void ConsoleWrite(string strMsg);
//匿名方法
ConsoleWrite delCW1 = new ConsoleWrite(WriteMsg);
delCW1("lalalala");
ConsoleWrite delCw2 = delegate (string strMsg)
{
    Console.WriteLine(strMsg);
};
delCW2("ruaruarua");

Iterators:迭代器 Nullable types:可以為Null的型別,該類可以是其它值或者null Getter/setter separate accessibility:屬性訪問控制 Method group conversions (delegates):方法組轉換,可以將宣告委託代表一組方法,隱式呼叫 Co- and Contra-variance for delegates and interfaces:委託、介面的協變和逆變 Static classes:靜態類 Delegate inference:委託推斷,允許將方法名直接賦給委託變數

C#3.0/C#3.5新特性

Implicitly typed local variables: Object and collection initializers:物件和集合初始化器 Auto-Implemented properties:自動屬性,自動生成屬性方法,宣告更簡潔 Anonymous types:匿名型別 Extension methods:擴充套件方法 Query expressions:查詢表示式 Lambda expression:Lambda表示式 Expression trees:表示式樹,以樹形資料結構表示程式碼,是一種新資料型別 Partial methods:部分方法

C# 4特性 (VS 2010)

Dynamic binding:動態繫結 Named and optional arguments:命名引數和可選引數 Generic co- and contravariance:泛型的協變和逆變 Embedded interop types (“NoPIA”):開啟嵌入型別資訊,增加引用COM元件程式的中立性

C# 5特性 (VS 2012)

Asynchronous methods:非同步方法 Caller info attributes:呼叫方資訊特性,呼叫時訪問呼叫者的資訊

C# 6特徵 (VS 2015)

Compiler-as-a-service (Roslyn) Import of static type members into namespace:支援僅匯入類中的靜態成員 Exception filters:異常過濾器 Await in catch/finally blocks:支援在catch/finally語句塊使用await語句 Auto property initializers:自動屬性初始化 Default values for getter-only properties:設定只讀屬性的預設值 Expression-bodied members:支援以表示式為主體的成員方法和只讀屬性 Null propagator (null-conditional operator, succinct null checking):Null條件操作符 String interpolation:字串插值,產生特定格式字串的新方法 nameof operator:nameof操作符,返回方法、屬性、變數的名稱 Dictionary initializer:字典初始化

C# 7 特徵 (Visual Studio 2017)

Out variables:out變數直接宣告,例如可以out in parameter Pattern matching:模式匹配,根據物件型別或者其它屬性實現方法派發 Tuples:元組 Deconstruction:元組解析 Discards:沒有命名的變數,只是佔位,後面程式碼不需要使用其值 Local Functions:區域性函式 Binary Literals:二進位制字面量 Digit Separators:數字分隔符 Ref returns and locals:引用返回值和區域性變數 Generalized async return types:async中使用泛型返回型別 More expression-bodied members:允許構造器、解析器、屬性可以使用表示式作為body Throw expressions:Throw可以在表示式中使用

C# 7.1 特徵 (Visual Studio 2017 version 15.3)

Async main:在main方法用async方式 Default expressions:引入新的字面值default Reference assemblies: Inferred tuple element names: Pattern-matching with generics: