abstract class IFoo { public abstract IFoo foo(IFoo a); } class IFoo_int : IFoo { private int content = 0; public IFoo_int(int content) { this.content = content; } public override IFoo foo(IFoo a) { return this; } } class MainClass { static void Main(string[] args) {} }