So, here is my code. The output is 2255. But I caanot understand why method in class A will be executed, for we haven't signed the event on it, as we haven't created an instance of class A.
using System;
public delegate void EvHappened();
class A{
protected int a = 0;
public event EvHappened AEv;
public A() {
this.AEv += EvAHappenedHandler;
}
public void EvAHappenedHandler(){
if (a > 3)
this.a++;
Console.Write(a);
}
public void methodA() {
this.AEv();
}
}
class B : A{
public event EvHappened BEv;
public void EvBHappenedHandler() {
this.a += 2; methodA(); Console.Write(a);
}
public void method(){
this.BEv();
}
}
class Program{
static void Main(string[] args){
B b = new B();
b.BEv += b.EvBHappenedHandler;
for (int i = 0; i < 2; i++){
b.method();
}
}
}

As you haven't declared any constructors in B, the compiler has provided a default constructor - it's as if you'd written:
public class B {
public B() : base() {
}
// Rest of class here
}
So when you call new B(), the A constructor will be executed. That constructor subscribes to the AEv event.
If you had declared a constructor yourself, the behaviour would depend on the constructor initializer:
this(...), the constructor would chain to another constructor in the same class. Eventually this "chain" will end up with a call to a constructor in the base class.base(...), the constructor would chain to the specified constructor in the base class.base().So whatever you do in the derived class, any constructor always ends up going through a constructor in the base class.
See more on this question at Stackoverflow