C 中delegate物件Equals方法簡析

2022-02-08 09:56:16 字數 1240 閱讀 8597

.net的基礎類object有乙個equals方法,這個方法用來比較兩個物件是否相等,預設的實現是比較兩個引用是否相同,相當於==操作符。對於不同的子類可能會有不同的實現,本篇就來研究一下delegate的equals方法。

首先是msdn上給出的說明

按照以下方式比較這些方法和目標是否相等:

利用以上規則通常可以判斷大部分情況的比較結果,但是如果用到了匿名方法,比如lambda表示式的時候應該怎麼處理呢。帶著這個問題我做了個小實驗。

首先定義了乙個類生產不同的delegate物件,乙個用到了成員變數_value,乙個用到了靜態變數_svalue,乙個沒有用到任何變數:

class

closureenv

public

func

createmethod()

public

func

createmethodusemember()

public

func

createmethodusestaticmember()

}然後定義兩個物件分別生產delegate,然後比較它們是否相同:

static void main(string args)

else

console

.write("use member: ");

if (env1.createmethodusemember().equals(env2.createmethodusemember()))

else

console

.write("use member with same object: ");

if (env1.createmethodusemember().equals(env1.createmethodusemember()))

else

console

.write("use static member: ");

if (env1.createmethodusestaticmember().equals(env2.createmethodusestaticmember()))

else

console.readkey();

}執行結果如下:

通過結果可以發現:

彙編中 equ 的作用

定義靜態符號 雖然資料段主要用於定義變數資料,但是也可以在這裡宣告靜態資料符號。equ 命令用於把常量值設定為可以在文字段中使用的符號 如 equ factor,3 equ linux sys call,0x80 經過設定之後,資料符號值是不能在 程式中改動的。equ 命令可以出現在資料段中任何位置...

C 中的委託 delegate

delegate,中文意為 委託 是c 中新引入的乙個概念。我個人的理解,delegate相當於c 中函式指標在oop程式設計下的封裝。delegate的用途,如同函式指標的功能一樣,是為了在類似啟動執行緒 通用庫中的高階函式 以及事件處理等場合中,把乙個方法,或者說函式,作為乙個引數來傳遞。del...

c 中delegate和事件

c 中delegate被稱作是 委託 類似c 中的函式指標,委託也可以指向乙個函式,但是不同的是,委託可以被理解為乙個列表,裡面的元素是一系列返回型別和參數列都相同的函式,之後就可以像使用變數一樣使用函式。system中有很多預先定義好的委託型別可以直接被呼叫,比如eventhandler就是事件的...