跟小靜讀CLR via C (04) 本是同根生

2021-09-06 03:50:17 字數 1449 閱讀 7815

說起.net中的類,本是同根生,一點不為過。因為clr要求所有類都要繼承自system.object。所有物件都必須提供一組通用操作,包括物件的等值性唯一性雜湊碼以及轉殖

一、等值性——equals()方法

有時候我們需要比較兩個物件是否相等,比如在乙個arraylist中進行排序查詢等操作時。

system.object提供了equals()虛方法:

class object

public virtual boolean equals(object o)

if (this == o) return true;

else return false;

這種判斷方式非常簡單:直接比較是兩個引用是否指向的是同一物件。但這樣比較是不確切的。所以我們需要重寫該方法,提供更合適的實現方式。

重寫時equals()四大原則?我們在離散數學中好像學過這個呀:

重寫思路

二、惟一性——referenceequals() 方法

惟一性指兩個引用指向同一物件。一旦我們的類重寫了ojbect的equals方法,我們就不能用它來檢測唯一性了。object提供了另乙個靜態方法referenceequals()

public class object ;

static void main(string args)

三、雜湊碼——gethashcode() 方法

system.object提供了虛方法gethashcode()從乙個物件上得到int32的雜湊碼。該方法返回的是在整個應用程式域中保證惟一的值,該值在物件整個生存週期內都不會改變。

如果我們重寫了類的equals()方法,那麼我們最好也重寫gethashcode()方法,否則編譯器可能會產生警告資訊。因為system.collections.hashtable類要求兩個相等的物件具有相同的雜湊值。

四、轉殖——icloneable介面

如果乙個類允許例項被拷貝,則繼承icloneable介面。

public inte***ce icloneable

淺拷貝?

當物件的字段值被拷貝時,字段引用的物件不會被拷貝。實現時可以呼叫object的memberwiseclone方法即可。

深拷貝?

物件例項中欄位引用的物件也進行拷貝。深拷貝後,新建立的物件和原物件沒有任何公用的東西,改變乙個物件時也不會影響另外乙個。

大端跟小端

補 x86機是小端 修改分割槽表時要注意 微控制器一般為大端 今天碰乙個關於位元組順序的問題,雖然看起來很簡單,但一直都沒怎麼完全明白這個東西,索性就找了下資料,把它弄清楚.因為現行的計算機都是以八位乙個位元組為儲存單位,那麼乙個16位的整數,也就是c語言中的short,在記憶體中可能有兩種儲存順序...

null跟undefind區別小總結

null是乙個表示 無 的物件,轉為數值時為0 undefined是乙個表示 無 的原始值,轉為數值時為nan。當宣告的變數還未被初始化時,變數的預設值為undefined。null用來表示尚未存在的物件 undefined表示 缺少值 就是此處應該有乙個值,但是還沒有定義。典型用法是 1 變數被宣...

C 中的readonly跟const用法小結

總結一下常量和唯讀欄位的區別 由來 筆者也是在看歐立奇版的 net 程式設計師面試寶典 的時候,才發現自己長久以來竟然在弄不清出兩者的情況下,混用了這麼長的時間。的確,const與readonly 很像,都是將變數宣告為唯讀,且在變數初始化後就不可改寫。那麼,const與readonly 這兩個修飾...