C 為型別 類或者結構 自定義值相等性的比較

2021-10-03 09:42:47 字數 926 閱讀 6988

類的預設相等性比較object.equals(object obj)是基於引用相等性的比較。對於結構,object.equals(object)的預設實現通過使用反射來比較型別中每個欄位的值,從而執行值相等性檢查。

在定義類或者結構時可以為類或者機構建立自定義的值相等比較。建立自定義比較的應用場景通常是預期將型別的物件新增到某個集合中,或者這些物件主要用於儲存一組字段或者屬性時,需要實現值相等性。自定義的比較的基準是型別中所有或者某些字段或者屬性的值相等性比較。其目的是為了提供更高效的方法(比較標準)執行值相等性檢查。

建立自定義的型別比較的步驟

(1).替代虛擬 object.equals(object) 方法。

(2).通過提供型別特定的 equals 方法實現 system.iequatable 介面。 實際的等效性比較將在此介面中執行。 例如,可能決定通過僅比較型別中的一兩個欄位來定義相等性。 不會從 equals 引發異常。 僅對於類:此方法應僅檢查類中宣告的字段。 它應呼叫 base.equals 來檢查基類中的字段。 (如果型別直接從 object 中繼承,則不要這樣做,因為 object.equals(object) 的 object 實現會執行引用相等性檢查。)

(3).可選但建議這樣做:過載 == 和 != 運算子。(即使類不過載 == 和 != 運算子,也可將這些運算子與類一起使用。 但是,預設行為是執行引用相等性檢查。 在類中,如果過載 equals 方法,則應過載 == 和 != 運算子,但這並不是必需的。對於結構,除非結構顯式過載了 == 和 != 運算子,否則預設情況下這些運算子無法對結構進行運算。)

(4).替代 object.gethashcode,以便具有值相等性的兩個物件生成相同的雜湊**。

(5)可選:若要支援「大於」或「小於」定義,請為型別實現 icomparable 介面,並同時過載 <= 和 >= 運算子。

**示例

Zabbix agent自定義值為空

環境 centos 7 zabbix server 4.0.19 zabbix agent 4.0.19 通過nvdia smi獲取顯示卡執行狀態 問題現象 由於server端無法直接訪問agent,所以採用了active模式,server端能獲取到agent上報的自帶項的值,自定義呼叫nvidia...

C自定義型別

一 自定義型別基本概念 1 結構體 結構體就是將任意多個內建型別變數包含在一起形成的乙個結構,結構特也可以巢狀定義,不能在內部定義自己結構的變數,因為是不完整的型別,但是可以定義指向自己型別的指標,這也是鍊錶的原理,其定義形式如下 struct a 2 列舉 列舉型別是由一些項組成的型別,具體看 列...

自定義型別 結構體

struct tag 結構體型別名稱 variable list 結構體變數 省略結構體型別名稱 匿名結構體型別 當省略掉結構體型別名稱時,就不能省略掉結構體變數,這樣是不合理的,所以一般我們不建議省略結構體型別名 struct x,y 全域性變數 struct a 20 p int main 注意...