[英]How to create a generic type on the Action delegate with a ByRef parameter?
[英]Accessing constructor parameter ByRef
我想制作一个具有仅写属性的通用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
为什么通过事件做到这一点? 我认为事件是您要尝试做的错误成语。 相反,我将回调方法作为属性公开,如下所示:
Public Property GetMyItem As Func(Of SomeType) = Function() Return Nothing
然后,您可以简单地做类似的事情(我的VB.Net语法对此有点生锈):
Dim myItem = GetMyItem()()
而不是注册事件,您只需像这样设置回调方法:
myObj.GetMyItem() = Function() return theObjectToSet
为什么带有事件处理程序的类没有要更新的值的字段? 在我看来,您正在使EventArgs类做太多事情。
另外,您拥有这种方式的方式与您想要的方式不同。 (但是我想您会发现不是您在问这个问题)。 这是行不通的,因为设置Item属性时,您正在更改EventArgs类指向的对象。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.