Безопасность потоков EventHandler в C #?

Использование моих пользовательских EventArgs, таких как:

public event EventHandler SampleEvent;

из msdn например:

public class HasEvent
{
// Declare an event of delegate type EventHandler of 
// MyEventArgs.

    public event EventHandler SampleEvent;

    public void DemoEvent(string val)
    {
    // Copy to a temporary variable to be thread-safe.
        EventHandler temp = SampleEvent;
        if (temp != null)
            temp(this, new MyEventArgs(val));
    }
}

У меня 2 вопроса:

1 )глядя на отмеченный код:

enter image description here

Я не вижу причин, по которым его следует копировать в другой параметр (относительно потоков )

. поскольку у нас есть ключ event, никто не может коснуться его списка вызовов (нет постороннего кода для класса, который я имею в виду)

2 )Если не ошибаюсь, функция DemoEventдолжна быть виртуальной, чтобы её можно было переопределить в подклассах... (Я уверен, что где-то её видел)

странно то, что решарпер тоже не добавит виртуальный:

так что если у меня есть этот код:

enter image description here

это подсказывает мне:

enter image description here

и когда я нажимаю:

enter image description here

так что еще раз мои 2 вопросы:

1 )Каков сценарий, который решит эта строка EventHandler temp = SampleEvent;в отношении безопасности потоков?

2 )Разве функция не должна быть virtual? (Я уверен, что видел этот шаблон с виртуальным)

13
задан PGSystemTester 29 June 2018 в 16:13
поделиться