.NET基礎2

帶着問題去思考!大家好

引用類型有哪些方法比較相等性呢?棧集合和隊列集合有啥子區別呢?泛型又有什麼東西呢?

首先關於第一個問題,.NET的引用類型有4種方法比較相等性,其中3個方法繼承System.Object基類,另一個就是==運算符。一般System.Object的派生類重寫了虛擬的Equals方法,用於比較對象狀態值,並同時重寫了GetHashCode方法,用於返回標識該類唯一性的散列碼

三種方法分別是Equals,靜態Equals方法和靜態ReferenceEquals方法,由於基類庫的類型都派生System.Object類,這三種方法都用來比較對象之間是否指向堆上的相同對象,比較的是引用地址,如果相等返回TRUE,他們直接有什麼區別呢?

1)靜態的ReferenceEquals方法可接受兩個object參數,用於比較兩個引用類型的引用類型地址是否相同,結果返回Ture,否則false,如果有一個引用類型爲null,則返回false,兩個引用類型均爲null。則返回true,該方法爲靜態方法,無法被重寫.當然兩種值類型變量比較用這個肯定是毫無意義,肯定返回false,而且會裝箱2

2)虛擬的Equals方法是實例方法,由實例直接調用,用於比較引用類型的引用地址是否相等,不過其派生類一般將其重寫爲比較對象的狀態值,即基於值的引用

3)靜態的Equals方法和虛擬的Equals方法一樣,

 委託

CLR能夠保證委託指向一個有效的方法,不會指向無效地址或者越界地址,

https://www.cnblogs.com/hushzhang/p/5901052.html這篇文章介紹的不錯,

泛型容器

在之前高性能裏面提到過Stack<T>,但未做詳細解說,這裏給大家講解下

首先statck表示對象的簡單後進先出(LIFO)非泛型集合,但是實際開發過程中不建議使用,更多的可以用Stack<T>,在高性能集合上面我們也有講解過。

Stack<T>表示相同類型的實例可變大小的後進先出集合,

使用場景:一般是臨時數據,需要同時多個線程訪問集合,

注意:當元素添加到Stack<T>時,將根據需要通過重新分配內部數組來自動增加容量,可以通過調用TrimExcess來減少容量。Stack<T>接受null作爲引用類型的有效值,並允許重複元素。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章