using System; abstract class Base { internal static T EndExecute (object source, string method) where T : Base { return null; } } class Derived : Base { internal static Derived EndExecute (object source) { return null; } } class a { public static int Main () { Derived.EndExecute (null, "something"); return 0; } }