Я новичок в С#, просто вопрос по классу EventArgs. Мы знаем определение:
public class EventArgs
{
public static readonly EventArgs Empty;
public EventArgs();
}
и я думаю, что одно из применений - это когда вы не заботитесь о передаче пользовательской информации
public event EventHandler<EventArgs> TestHappening;
private void MyMethod()
{
TestHappening( this, EventArgs.Empty );
}
но разве мы не можем достичь той же цели, используя:
TestHappening( this, new EventArgs() );
Я думаю, что это просто лучшая читабельность.
EventArgs.Empty просто определяет экземпляр EventArgs без данных. В C# существует множество классов с определенным свойством для объявления состояния, типа или значения этого класса для поддержки тех, кто просто подходит к C#. string.Empty
, int.MaxValue
и т. д. являются примерами для этого
Предпочтительнее использовать EventArgs.Empty
по двум причинам:
Удобно проверять, пусты ли аргументы
EventArgs newArgs = new EventArgs();
EventArgs emptyArgs = EventArgs.Empty;
Console.WriteLine(newArgs == EventArgs.Empty); // false
Console.WriteLine(emptyArgs == EventArgs.Empty); // true
В исходнике это
public static readonly EventArgs Empty = new EventArgs();
, а это просто статический элемент Empty для сохранения выделений.