using System; public class A { public virtual int Foo (int i) { return 1; } public virtual int this [int i, string s] { get { return 1; } } } public class B : A { public new int Foo (int x) { return 2; } public new int this [int i, string s2] { get { return 2; } } } public class Test { public static int Main () { B p = new B (); if (p.Foo (i : 1) != 1) return 1; if (p.Foo (2) != 2) return 2; if (p [i : 1, s : "2"] != 1) return 3; if (p [i : 1, s2 : "2"] != 2) return 4; if (p [1, "2"] != 2) return 5; return 0; } }