2013-05-03 58 views
0

基本上我試圖用Actions來做this。我需要做這樣的事情,而不是一個屬性,因爲至少在其中一個實體引用另一個類的Action - 因爲你只能添加/刪除操作,而不是實際返回它們,我需要包裝它在一個添加/刪除而不是get。是否可以在添加/刪除界面中使用操作?

interface Whatever 
{ 
    Action MyAction { get; } 
} 

class WhateverConcretion : Whatever 
{ 
    Action MyAction 
    { 
     get { return SomeLibraryClass.StaticAction; } 
    }   
} 

我的項目依賴於特定平臺庫,所以我打算讓我的類依賴於一個包裝類的接口和每個平臺的庫上會被包裹在自己的講座,直到我來到這工作得很好包裝行動。

+0

你試過了嗎?正如書面所述,這很好。你的鏈接是關於事件的,而不僅僅是爲代表使用屬性。 – 2013-05-03 16:24:48

+0

看起來像你寫的應該工作得很好。我認爲你正在考慮事件 - 動作就像其他任何普通的C#對象一樣。 – Mason 2013-05-03 16:27:24

+0

您已經完成了類型爲「Action」的***屬性***。屬性有一個或兩個訪問器,稱爲'get'和/或'set'。爲了讓***事件***改爲在類型('Action')之前包含關鍵字'event'。事件有兩個稱爲'add'和'remove'的訪問器。下面是一個例子:'公共事件Action MyEvent {add {...} remove {...}}'。 「Action」類型是委託類型,因此可用於事件。由於它的返回類型爲'void',並且沒有類型參數是逆變的,所以我認爲它是適合事件的類型。 – 2013-05-03 16:37:03

回答

1

如果您創建了一個包裝器,則通常會將內部類的成員發佈到外部世界,最好使用該成員的相同名稱和類型。要包裝方法很簡單:只需創建另一個調用內部類方法的方法,傳遞它的參數並返回它的值。對於相同的屬性:根據需要使用getter和setter創建屬性,並調用內部實例的屬性的getter和setter。

現在對於evens來說它是一樣的。在包裝類中創建一個事件並將其呼叫重定向到內部類:

public event Action MyAction 
{ 
    add 
    { 
     SomeLibraryClass.StaticAction += value; 
    } 
    remove 
    { 
     SomeLibraryClass.StaticAction -= value; 
    } 
} 
+0

'add'和'remove'訪問器的返回類型爲'void',所以'return'語句不正確。 – 2013-05-03 16:41:01

+0

@Jeppe:我的stuppid複製粘貼錯誤。謝謝! – 2013-05-03 16:44:37

相關問題