abstract class A where T:A
{
public event Action Event1;
}
class B : A
{
//has a field called Action Event1;
}
Since A is abstract, you can add abstract methods to A and invoke them from A and B, which will be forced to implement the method, will be the invoker:
abstract class A where T:A
{
public event Action Event1;
public abstract void Method();
public A(){Method();}
}
class B : A
{
//has a field called Action Event1;
public void Method(){ //stuff }
}
On instantiation of B, the base class constructor will call Method() which is only implemented in B, forcing B's instance to be called.
This allows A to invoke subclass specific methods without requiring A to have specific knowledge of Children. The downside is that ALL children must implement Method or re-abstract it to their own children.