Это не относится к какому-либо реальному коду, это просто любопытство ...
Я играл с 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
Я ожидал, что только ББ и БА появятся ...
Почему события переопределяются по-другому?
Поскольку события - это просто свойства типа делегата, и «add» / «remove», похоже, работают так же, как и любой другой метод доступа, я ожидал, что они будут переопределены так же, как «get» / «set» из обычного свойства.