繁体   English   中英

访问构造函数参数ByRef

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM