Доступ к параметру конструктора ByRef - PullRequest
0 голосов
/ 22 ноября 2010

Я хочу создать общий подкласс 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 ]

2 голосов
/ 23 ноября 2010

Почему это с помощью событий? Я думаю, что событие - неправильная идиома для того, что вы пытаетесь сделать. Вместо этого я бы выставил метод обратного вызова как свойство, примерно так:

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

Тогда вы можете просто сделать что-то вроде этого (мой синтаксис VB.Net немного устарел):

 Dim myItem = GetMyItem()()

И вместо регистрации события вы просто устанавливаете метод обратного вызова следующим образом:

 myObj.GetMyItem() = Function() return theObjectToSet
1 голос
/ 22 ноября 2010

Почему бы в классе с обработчиком событий не было поля для этого значения, которое вы хотите обновить? Мне кажется, что вы заставляете класс EventArgs делать слишком много.

Кроме того, то, как вы это делаете, не работает так, как вы хотите. (но я думаю, вы видите, что это не вы задаете вопрос). Это не работает, потому что когда вы устанавливаете свойство Item, вы изменяете то, на что указывает класс EventArgs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...