I 간단한 추상 클래스 가지고호출베이스 이벤트 핸들러 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과 call을 위해 – MikeT
@MIkeT는 당신에게 절대 아무것도주지 않습니다. 당신은 단순히 그것을 없애지 않고 경쟁 조건을 바꾸고 있습니다. 이제는 안되면 행사가 시작됩니다. – InBetween
@MikeT 예, 스레드로부터 안전하지는 않지만 가장하지는 않습니다. 당신이 제안한 것도 그 중 하나가 아닙니다. 그것은 실제로 일반적인 실수입니다. 그렇게해서는 안됩니다. http://blog.stephencleary.com/2009/06/threadsafe-events.html – ken2k