using System; class AA { public virtual int Foo (int i) { return 1; } } abstract class A : AA { public int Foo (byte b) { return 2; } public override int Foo (int i) { return 4; } } sealed class B : A { public override int Foo (int i) { return 3; } public void Foo (string s) { } } struct S { public override string ToString () { return "aaaa"; } } class MyClass { public static int Main () { S s = new S (); string sss = "a" + s.ToString (); B b = new B (); int res = b.Foo (1); if (res != 2) return res; Console.WriteLine ("OK"); return 0; } }