public static void Main()
    {
        var greenChild1  = new GreenChild("child1");
        var greenParent1 = new GreenParent("parent1", greenChild1);
        var greenParent2 = new GreenParent("parent2", greenChild1);
        var redParent1   = greenParent1.MakeFacade();
        var redParent2   = greenParent2.MakeFacade();

        Console.WriteLine(redParent1.Value);              // parent1
        Console.WriteLine(redParent1.Child.Parent.Value); // parent1 !
        Console.WriteLine(redParent2.Value);              // parent2
        Console.WriteLine(redParent2.Child.Parent.Value); // parent2 !
        // See how that goes? RedParent1 and RedParent2 disagree on what the
        // parent of greenChild1 is, **but they are self-consistent**. They
        // always report that the parent of their child is themselves.
    }
 public GreenParent(string value, GreenChild child) : base(value)
 {
     this.child = child;
 }