public abstract IBar this[IBar a, IBar o, IBigMess r] {
     get; set;
 }
 public abstract IBar DeepOutRef(IBar a, out IBar o, ref IBigMess r);