#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. пожалуйста, добавьте некоторое объяснение того, на что вы ответили