나는이 프로그램이 있습니다C# 이벤트 상속
class One
{
public delegate void del(object o);
public event del SomethingChanged;
int x;
public int X
{
get { return x; }
set { x = value; OnSomethingChanged(this); }
}
protected void OnSomethingChanged(object o)
{
if (SomethingChanged != null)
SomethingChanged(o);
}
}
class Two: One
{
public void ChangeSomething()
{
//if (SomethingChanged != null)
// SomethingChanged(this);
OnSomethingChanged(this);
}
}
static void Main(string[] args)
{
One one = new One();
Console.WriteLine(one.X);
one.SomethingChanged += new One.del(one_SomethingChanged);
one.X = 5;
}
static void one_SomethingChanged(object o)
{
Console.WriteLine(((One)o).X);
}
2 종류가 있습니다 - 하나, 둘, 두 하나의 자손이다. 클래스 1 (SomethingChanged)에 선언 된 이벤트가 있으며 클래스 1과 클래스 2에 의해 트리거됩니다. Two.ChangeSomething - 기본 클래스의 메서드를 호출하여 이벤트를 발생시킵니다. 나는
if (SomethingChanged != null) SomethingChanged(this);
내가
The event 'One.SomethingChanged' can only appear on the left hand side of += or -= (except when used from within the type 'eventstest.Program.One')
그래서 내가 수업 시간에 '원시'코드를 사용할 수없는 이유 그냥 궁금 해요 말 컴파일러 오류를 받고 있어요 같은 원시 코드를 사용하여 이벤트를 호출하려고하지만 경우 2 개의 이벤트를 발생 시키지만 해당 함수 이벤트를 호출 할 때 발생합니까?
[편집]
어떤 해명 여기 찾았 C#: Raising an inherited event
꽤 많이 정확하게 말한 old Jon Skeet 답변에 대한 링크를 게시하려했는데 (http://stackoverflow.com/questions/253757/why-events-cant-be-used-in-the-same -way-in-derived-class-as-the-base-class # 253803) +1 – RobV