一、前言
其實說到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 =