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!");
class DerivedClass4 : AbstractBaseClass
public new void BaseMethod() {
Console.WriteLine("DerivedClass4::BaseMethod() called!");
Console.Write("Now calling base: ");
public override void AbstractBaseMethod()
Console.WriteLine("DerivedClass4::AbstractBaseMethod() called!");
public override void VirtualBaseMethod()
Console.WriteLine("DerivedClass4::VirtualBaseMethod() called!");
Console.Write("Now calling base: ");
base.VirtualBaseMethod();
static class ActorCompiler
public static void CompileClass(AbstractBaseClass abc)
abc.AbstractBaseMethod();
public static void Main()
DerivedClass1 x = new DerivedClass1();
DerivedClass2 y = new DerivedClass2();
DerivedClass3 z = new DerivedClass3();
DerivedClass4 a = new DerivedClass4();
ActorCompiler.CompileClass(x);
ActorCompiler.CompileClass(y);
ActorCompiler.CompileClass(z);
ActorCompiler.CompileClass(a);