using System; public class ClassA {} public class ClassB {} public class Gen { static bool checkArr (Array arr, int length) { if (arr.GetType () != typeof (S[])) return false; if (arr.Length != length) return false; return true; } public bool test () { return checkArr (newArr (), myLength ()); } public virtual int myLength () { return 3; } public virtual S[] newArr () { return new S[3]; } } public class GenSub : Gen { public override int myLength () { return 4; } public override S[] newArr () { return new S[4]; } } public class GenSubSub : GenSub { public override int myLength () { return 5; } public override S[] newArr () { return new S[5]; } } public class main { public static int Main () { Gen ga = new Gen (); Gen gsa = new GenSub (); Gen gss = new GenSubSub (); if (!ga.test ()) return 1; if (!gsa.test ()) return 1; if (!gss.test ()) return 1; return 0; } }