Действительно ли ключевое слово 'событие' является дополнительным в C#?

Если вы уверены, что в данных дат нет лет, попробуйте следующее:

function sortDateStrArrayFrom(dayAndMonth, array) {
    const dateFrom = new Date(dayAndMonth);

    const datesBefore = [];
    const datesEqual = [];
    const datesAfter = [];

    array.forEach(dateStr => {
        const date = new Date(dateStr);

        if (date < dateFrom) {
            datesBefore.push(dateStr);
        }

        if (date === dateFrom) {
            datesEqual.push(dateStr);
        }

        if (date > dateFrom) {
            datesAfter.push(dateStr);
        }
    })

    return [...datesEqual, ...datesAfter, ...datesBefore];
}

const arr = ['21. may', '01. jan', '05. feb', '07. jun', '20. dec'];

sortDateStrArrayFrom('18. mar', arr); // ["21. may", "07. jun", "20. dec", "01. jan", "05. feb"]

При необходимости его можно изменить, указав дату в качестве входного параметра или установив тот же год для каждая дата работать независимо от года

17
задан Prankster 2 April 2009 в 21:42
поделиться

3 ответа

  • eventOne общественное мероприятие, поддержанное частным полем типа EventHandler.
  • eventTwo общедоступное поле типа EventHandler.

В основном событие только инкапсулирует идеи, "подписываются" и "отказываются от подписки" таким же образом, которого свойство только инкапсулирует идеи, "получают" и "устанавливают", а не настоящее хранение. (Что касается CLR, что событие может также выставить метод "повышения", но C# никогда не использует это. Проигнорируйте его.)

См. мою статью о событиях (альтернативная ссылка) для больше о различии между делегатами и событиями.

20
ответ дан 30 November 2019 в 10:59
поделиться

При помощи ключевого слова события Вы говорите, что C# идут, генерируют к скрытым методам, add_XXX и remove_XXX для Вашего базового делегата. Это удостоверяется, что любой использующий Ваш класс может только присоединить и удалить делегатов в событии. Ключевой пункт - то, что никто вне Вашего класса и не генерирует событие, таким образом, у Вас есть полный контроль, когда это произойдет.

Если Вы не используете событие затем, Вы просто подвергаете общедоступного делегата, к которому любой может добавить, удалить из и вызвать. Очень маловероятно, что Вы хотите, чтобы любой кроме Вашего класса сделал вызов.

17
ответ дан 30 November 2019 в 10:59
поделиться

Это - программа для иллюстрирования различия, принимая во внимание ответы прежде

using System;
class Program
{
    static void Main(string[] args)
    {
        var a = new A();
        a.eventOne += (s, e) => Console.WriteLine("One");
        a.eventTwo += (s, e) => Console.WriteLine("Two");
        a.RaiseOne();
        a.RaiseTwo();
                // won't compile
        a.eventOne(null, EventArgs.Empty);
        a.eventTwo(null, EventArgs.Empty);
    }

}

class A {
    public event EventHandler eventOne;
    public EventHandler eventTwo;

    public void RaiseOne()
    {
        if (eventOne != null)
            eventOne(this, EventArgs.Empty);
    }

    public void RaiseTwo()
    {
        if (eventTwo != null)
            eventTwo(this, EventArgs.Empty);
    }
}
9
ответ дан 30 November 2019 в 10:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: