我想创建一个具有只写属性的通用EventArgs子类,当由处理事件的代码更新时,它还将更新类的构造函数的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
答案 0 :(得分:2)
为什么要通过活动?我认为一个事件是你想要做的事情的错误习惯。相反,我会将一个回调方法作为属性公开,如下所示:
Public Property GetMyItem As Func(Of SomeType) = Function() Return Nothing
然后你可以简单地做一些事情(我的VB.Net语法对此有点生疏):
Dim myItem = GetMyItem()()
而不是注册一个事件,你只需设置回调方法,如下所示:
myObj.GetMyItem() = Function() return theObjectToSet
答案 1 :(得分:1)
为什么带有事件处理程序的类没有要更新的值的字段?在我看来,你正在使EventArgs类做得太多。
此外,你拥有它的方式不能按照你想要的方式工作。 (但我想你看到的不是你在问这个问题)。它不起作用,因为当您设置Item属性时,您正在更改EventArgs类指向的内容。