2010-11-22 139 views
-1

我想創建一個具有隻寫屬性的通用EventArgs子類,該類只有在由處理事件的代碼更新時纔會更新該類的構造函數的byref參數。訪問構造函數參數ByRef

我到目前爲止的代碼不起作用。我如何獲得屬性「Item」來更新「item」構造函數參數,以便我可以檢索設置的值?

public class EventArgsSet<T> : EventArgs 
{ 
    public EventArgsSet(ref T item) 
    { 
     Item = item; 
    } 

    public T Item 
    { 
     private get; 
     set; 
    } 
} 

我希望能夠提高這樣的事件(VB.NET):

Dim myItem As SomeType = Nothing 
Dim e = new EventArgsSet(Of SomeType)(myItem) 
RaiseEvent SomeEvent(Me, e) 
//'Do something with myItem 

且事件處理程序可以是這個樣子:

Public Sub myObj_SomeEvent(sender As Object, e As EventArgsSet(Of SomeType)) Handles myObj.SomeEvent 
    e.Item = theObjectToSet 
End Sub 

回答

2

爲什麼通過事件做到這一點?我認爲一個事件是你想要做的事情的錯誤成語。相反,我會暴露一個回調方法,屬性,像這樣:

Public Property GetMyItem As Func(Of SomeType) = Function() Return Nothing 

然後,你可以簡單地做這樣的事情(我VB.Net語法有點這個生鏽):

Dim myItem = GetMyItem()() 

而不是註冊一個事件,您只需設置回調方法,像這樣:

myObj.GetMyItem() = Function() return theObjectToSet 
1

爲什麼止跌具有事件處理函數的類有一個要更新的值的字段?在我看來,你讓EventArgs類做得太多了。

此外,你有這種方式不符合你的想法。 (但我想你會發現你不是在問這個問題)。它不起作用,因爲當您設置Item屬性時,您正在更改EventArgs類指向的內容。

+0

由於事件正在從正在請求從父對象信息的子對象解僱,但不應該要求有任何k現在是父母的結構。對於答案的第二部分,是的,我知道我發佈的代碼存在缺陷,但認爲這有助於展示我正在努力完成的任務。我想我錯了。 – adam0101 2010-11-22 20:24:26