using System; using System.Collections.Generic; public abstract class BaseDataObjectFactory { protected static T GetBusinessQueryObjectFromReader () where T : BusinessQueryObject, new () { T t = new T (); return t; } public abstract T [] GetQueryObjects (string query) where T : BusinessQueryObject, new (); } public class BusinessQueryObject { } public class MySqlDataObjectFactory : BaseDataObjectFactory { public override T [] GetQueryObjects (string query) { List list = new List (); list.Add (GetBusinessQueryObjectFromReader ()); ExecuteReader(5, delegate() { list.Add(GetBusinessQueryObjectFromReader()); }); return list.ToArray (); } static void ExecuteReader (int a, PerformActionWithReader action) { } delegate void PerformActionWithReader (); } public class C { public static void Main () { } }