一、前言

其實說到ref,很多同學(xué)對它已經(jīng)有所了解,ref是C# 7.0的一個語言特性,它為開發(fā)人員提供了返回本地變量引用和值引用的機制。
Span也是建立在ref語法基礎(chǔ)上的一個復(fù)雜的數(shù)據(jù)類型,在文章的后半部分,我會有一個例子說明如何使用它。

回到目錄

二、ref關(guān)鍵字

不論是ref還是out關(guān)鍵,都是一種比較難以理解和操作的語言特性,如C語言中操作指針一樣,這樣的高級語法總是什么帶來一些副作用,但是我不認(rèn)為這有什么,而且不是每一個C#開發(fā)者都要對這些內(nèi)部運行的機制有著深刻的理解,我覺得不論什么復(fù)雜的東西只是為人們提供了一個自由的選擇,風(fēng)險和靈活性永遠是不能兼容的。

來看幾個例子來說明引用與指針的相同性,當(dāng)然下面的使用方式早在C# 7.0之前就可以使用了:

public static void IncrementByRef(ref int x){
    x++;
}public unsafe static void IncrementByPointer(int* x){
   (*x)++;
}

上面兩個函數(shù)分別是使用ref和非安全指針來完成參數(shù)+1。

int i = 30;
IncrementByRef(ref i);// i = 31unsafe{
   IncrementByPointer(&i);
}// i = 32

下面是C# 7.0提供的特性:

1.ref locals (引用本地變量)

int i =