using System; public interface IFoo { void Tst(); } public class Foo : IFoo { public void Tst () { } } public abstract class BusinessBase where TYPE : BusinessBase, new () { public static void Load (KEY id) { TYPE instance = new TYPE (); instance = instance.DataSelect (id); } protected abstract TYPE DataSelect (KEY id); } public class Page : BusinessBase { protected override Page DataSelect (Guid k) { return new Page (); } public static void Test (T t) where T : IFoo { t.Tst(); } } class D { static void Main () { Page.Load (new Guid ()); Page.Test (new Foo ()); } }