abstract class AbstractBaseClass
public void BaseMethod() {
Console.WriteLine("AbstractBaseClass::BaseMethod() called!");
public abstract void AbstractBaseMethod();
public virtual void VirtualBaseMethod() {
Console.WriteLine("AbstractBaseClass::VirtualBaseMethod() called!");
class DerivedClass1 : AbstractBaseClass
public override void AbstractBaseMethod()
Console.WriteLine("DerivedClass1::AbstractBaseMethod() called!");
class DerivedClass2 : AbstractBaseClass
public override void AbstractBaseMethod()
Console.WriteLine("DerivedClass2::AbstractBaseMethod() called!");
public override void VirtualBaseMethod()
Console.WriteLine("DerivedClass2::VirtualBaseMethod() called!");
class DerivedClass3 : AbstractBaseClass
public new void BaseMethod() {
Console.WriteLine("DerivedClass3::BaseMethod() called!");
public override void AbstractBaseMethod()
Console.WriteLine("DerivedClass3::AbstractBaseMethod() called!");
public override void VirtualBaseMethod()
Console.WriteLine("DerivedClass3::VirtualBaseMethod() called!");
public virtual void CompileClass(AbstractBaseClass abc)
abc.AbstractBaseMethod();
public static void Main()
DerivedClass1 x = new DerivedClass1();
DerivedClass2 y = new DerivedClass2();
DerivedClass3 z = new DerivedClass3();
new ActorCompiler().CompileClass(x);
new ActorCompiler().CompileClass(y);
new ActorCompiler().CompileClass(z);