C # Возвращает объект с событием

#c# #events

#c# #Мероприятия

Вопрос:

Я пытаюсь вернуть объект в моем событии:

 public class MyEvent : EventArgs
{
 public Channels number = new Channels(); // Channels is a class where i declared only variables( i try to return all variables inside this class)
 public MyEvent(Channels numero)
 {
  return numero;
 }
}
  

Этот код не работает, и я не знаю, как вернуть объект, который содержит мои переменные каналов.

Комментарии:

1. Вы создали конструктор, у которого нет возвращаемого типа.

2. У вас есть EventHandler<MyEvent> где-нибудь? Можете ли вы показать нам, как вы его используете?

Ответ №1:

Измените это на:

 public class MyEvent : EventArgs
{
 public Channels Number {get;}

 public MyEvent(Channels numero)
 {
   Number = numero;
   //return numero; You cannot use "return" in a CTOR!
 }
}
  

Затем вы можете использовать его в обработчике событий, подобном этому:

 void MyEventHandler( object sender, MyEvent e )
{
   // sender => object that raised the event
   // e => an instance of `MyEvent`, having a property, we can read.
   var channels = e.Number; // use the info
}
  

Конечно, вы бы зарегистрировали его, прежде чем он будет запущен:

 someInstanceProvidingTheEvent.MyEventHappened  = MyEventHandler;
  

Инициирование события работает примерно так:

 // assume we are in the class that offers the Event
public event EventHandler<MyEvent> MyEventHappened;

protected virtual void OnMyEventHappened( Channels chans )
{
    // You may want to add some error fortification, here
    MyEventHappened?.Invoke(this, new MyEvent(chans));
}

// raise it
public void SomeMethod(){
    var theChannels = new Channels();
    // yadda yadda
    // now it happens!
    OnMyEventHappened(theChannels);
}
  

Комментарии:

1. Я не понимаю вашу реплику public Channels Number {get;} , что это значит? Там я не могу восстановить объект, который содержит переменные каналов.

2. Это свойство доступно только для чтения. Он будет установлен в конструкторе и с этого момента будет неизменяемым.

Ответ №2:

     public class MyEvent : EventArgs
    {
        public Channels _channels { get; set; }

        public MyEvent(Channels numero)
        {
            _channels = numero;
        }
    }
    public class Program
    {
        public Main()
        {
            Channels myChannels = new Channels();
            MyEvent _myEvent = new MyEvent(myChannels);

            var youWant = _myEvent._channels;
        }
    }
  

Комментарии:

1. пожалуйста, добавьте некоторое объяснение того, на что вы ответили