我有一個簡單的抽象類:調用基地的事件處理程序6
abstract class Lesson
{
public event EventHandler<SpeakEventArgs> Speak;
public string OpeningMessage { get; set; }
public string ClosingMessage { get; set; }
public bool completed { get; private set; } = false;
abstract public void Do();
}
和一個簡單的子類:
class BubbleSort : Lesson
{
public override void Do()
{
base.Speak?.Invoke(this, new SpeakEventArgs { Message = OpeningMessage });
}
}
子類使用C#6空條件運算符?.
。此代碼給出了錯誤
事件「Lesson.Speak」只能出現在左手側+ =或 - =
肯定(類型「課」內使用時除外)作爲一個小班我在這裏的類型'教訓'?我如何在子類中調用基類事件?
'this.Speak(this,e);'不是線程安全的,它有可能取消訂閱null檢查和調用之間的事件,而應該將處理程序複製到對象,然後檢查對於null和來自那裏的電話 – MikeT
@MIkeT讓你絕對沒有任何東西;你只是改變比賽條件,而不是將其移除。現在你有一個事件發生時,它不應該。 – InBetween
@MikeT是的,它不是線程安全的,但它並不假裝。你的建議不是。這實際上是一個常見的錯誤,你不應該那樣做。見http://blog.stephencleary.com/2009/06/threadsafe-events.html – ken2k