public static void Main()
Base[] array = new Base[2];
array[0] = new Derived1();
array[1] = new Derived2();
foreach (Base b in array)
Console.WriteLine(b.Foo() + " " + b.test() + " " + b.Number.ToString());
IUsable[] array02 = new IUsable[1];
array02[0] = new Derived2();
Console.WriteLine(array02[0].Usable("test"));
public abstract class Base
public abstract string Foo();
public virtual string test() {
public int Number { get; set; }
public class Derived1: Base
public override string Foo()
public override string test() {
{ return "my own output"; }
public class Derived2: Base, IUsable
public override string Foo()
public string Usable(string input) {
return input + " this has been modified";
string Usable(string input);