static void Main()
    {
        int      i = 0;
        whatever x = new whatever(() => i.ToString());

        Console.WriteLine(x);
        i = 1;
        Console.WriteLine(x);
        Console.ReadKey();
    }
 public static ITop MakeMeOne(whatever x)
 {
     if (x == something)
     {
         return(BottomA(x));
     }
     else
     {
         return(BottomB(x));
     }
 }
    static void Main()
    {
        var myRefType = new MyRefType();

        myRefType.MyInt = 0;
        var x = new whatever(myRefType);

        Console.WriteLine(x);
        myRefType.MyInt = 1;
        Console.WriteLine(x);
        Console.ReadKey();
    }
 abstract public void Process(whatever args you need);
 public BottomB(whatever x)
 {
 }
 public BottomA(whatever x)
 {
 }