interface IHaveASandwich{
class SimpleBag : IHaveASandwich{
public virtual void Yummy(){
Console.WriteLine("Yummy for SimpleBag");
class SuperBag : SimpleBag{
public override void Yummy(){
Console.WriteLine("Yummy for SuperBag");
static class BagEnhancer{
public static void Dummy(this IHaveASandwich bag){
Console.WriteLine("Dummy for IHaveASandwich");
public static void Dummy(this SimpleBag bag){
Console.WriteLine("Dummy for SimpleBag");
public static void Dummy(this SuperBag bag){
Console.WriteLine("Dummy for SuperBag");
public static void Main()
IHaveASandwich bag = new SuperBag();