using System.Collections.Generic;
public static void Main()
var thing = new Thing() { Data = "Hello World!" };
SomeAbstractOperation(thing);
var shadowThing = new ShadowThing() { Data = "How are you?" };
SomeAbstractOperation(shadowThing);
private static void SomeAbstractOperation<T>(T thing)
Console.WriteLine("OH NOES");
Console.WriteLine(thing.Data);
public object Data { get; set; }
public class ShadowThing : Thing
public new string Data { get; set; }