这并不涉及任何实际代码,只是出于好奇...
我正在玩一些C#,并遇到了这个问题:
using System;
public class Program
{
public class A
{
protected bool boolean;
public virtual bool Boolean { get { return boolean; } set { boolean = value; Console.WriteLine("AB"); } }
public virtual event Action action;
public A()
{
action += () => Console.WriteLine("AA");
}
}
public class B : A
{
public override bool Boolean { get { return boolean; } set { boolean = value; Console.WriteLine("BB"); } }
public override event Action action;
public B() : base()
{
action += () => Console.WriteLine("BA");
}
public void Invoke()
{
action.Invoke();
}
}
public static void Main()
{
B b = new B();
b.Boolean = false;
b.Invoke();
}
}
书面内容为:
BB
AA
BA
我期望只有BB和BA会出现...
在覆盖事件时如何以不同的方式处理事件?
由于事件只是委托类型的属性,并且'add'/'remove'似乎和其他访问器一样工作,所以我希望它们像从常规属性中'get'/'set'一样被覆盖。
答案 0 :(得分:0)
事件调度程序可以附加多个委托。
在action
的构造函数中设置了B
变量,该变量调用基类A
的构造函数,请注意:base in {{1 }};因此添加了第二个处理程序,输出为“ AA”。