访问构造函数参数ByRef

时间:2010-11-22 18:53:50

标签: c# .net vb.net parameters constructor

我想创建一个具有只写属性的通用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

2 个答案:

答案 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类指向的内容。