C 在屬性中用Lambda語法

2022-01-12 11:19:53 字數 1141 閱讀 3351

今天看**改功能的時候遇到了個比較奇怪的地方,在屬性裡也能用lambda,我看了好久,也不是很理解,我都開始懷疑這是不是屬性了,又在群裡討論了下這個問題,覺得有必要記下來,因為又漲知識了。

問題1:這是個屬性麼?

這個還是屬性,只不過是後邊多了個lambda表示式,=>後邊可以理解為乙個方法。但是是屬性卻沒有get;set;確實令人不解,所以就又用反編譯工具反編譯一下。在反編譯後的**裡,看到這個的確是乙個屬性,是乙個只有get方法,卻沒有set方法的屬性。

問題2:把 => 換成 = 會有什麼變化?

為了便於演示效果,我又重寫了個類似的語句。

我們會看到兩種寫法都不會報錯,但是他們的區別是什麼呢,接下來繼續反編譯。

可以看到用 = 的abc是乙個字段,而用 => 生成abc1,是乙個唯讀的屬性,看到反編譯後的**,又加深了那個認知,屬性本質上就是乙個方法。

附:在其他的屬性中,我還發現了這種寫法。這種用法就是屬性直接獲取webconfig裡面的配置資訊,也是一絕。

總結一下:這些都是c#語法糖的使用,曾經看到一句話,不會委託,泛型,lambda這種,c#**是越看越難的。但是這種在屬性裡用lambda,我覺得是不太好的,效能問題是其一,最重要的是白白增加複雜程度,真的不利於閱讀,維護。像我,看了一會兒,又研究研究,半天快過去了。

堆,堆在C 中用法

堆有最大堆與最小堆,也有對應的push和pop操作。在最大堆中,最大的元素在堆頂,pop會將最大的元素推出,最小堆則反之。c 中的堆,要基於向量使用。操作基於三個函式std make heap,std push heap,std pop heap,並且要配合push back與pop back使用。...

在c 中用while(cin)的問題

xp系統中利用dev cpp進行程式設計,語句while cin str str是個string型別,在一行中輸入幾個string,末位加個ctrl z,輸入沒有結束,除非出入換行後,再輸入ctrl z才能跳出輸入。一直不明白未什麼,解釋請看下。輸入緩衝是行緩衝。當從鍵盤上輸入一串字元並按回車後,這...

在c 中用while(cin)的問題

xp系統中利用dev cpp進行程式設計,語句while cin str str是個string型別,在一行中輸入幾個string,末位加個ctrl z,輸入沒有結束,除非出入換行後,再輸入ctrl z才能跳出輸入。一直不明白未什麼,解釋請看下。輸入緩衝是行緩衝。當從鍵盤上輸入一串字元並按回車後,這...