2012-05-26 41 views
5

我試圖與代表和http://msdn.microsoft.com/en-us/library/aa288459(v=vs.71).aspx熟悉自己FNC指針,我讀:代表在C#和C++

「不像C或C函數指針++,代表是面向對象,類型 - 安全又可靠。」

一個意思,我有C++背景,有些不能看到如何理解「不像」這個詞。代表什麼意思是面向對象的,C++ fnc指針不是?類型安全,安全。

任何人都可以顯示幾個例子和反例?

謝謝。

+1

看這個問題..... [類型不安全的C++函數指針] [1] [爲什麼C#函數指針比C++函數指針更好] [2] [ 1]:http://stackoverflow.com/questions/10237847/how-are-function-pointers-type-unsafe [2]:http://stackoverflow.com/questions/2535516/how-are-delegates- in-c-sharp-better-function-pointers-in-cc –

+0

可能重複:[C#中是否有函數指針](http://stackoverflow.com/questions/2738850/are-the函數指針在c) –

+0

#MdKamruzzamanPallob從第一個鏈接:「函數指針實際上是類型檢查,是類型安全的。」 – smallB

回答

6

委託不僅僅是一個函數指針。它不僅存儲函數地址,還存儲對目標對象的引用。與C++方法指針不同。所以調用實例方法很簡單。這照顧了「面向對象」的主張。

從那裏開始有點下坡,但編譯器在分配委託時驗證函數簽名完全匹配委託類型,從而確保類型安全。這在C++中沒有什麼不同,但是沒有辦法解決不匹配問題。另一個可能的安全方面是由委託對象持有的對象引用對垃圾收集器可見。所以你永遠不能在已經刪除的對象上調用實例方法。