using System; using System.Reflection; class AbstractFactory { public IReflect CreateObject(string classname) { IReflect objreflect; try { System.Type oType = System.Type.GetType(classname,true); objreflect = (IReflect)System.Activator.CreateInstance(oType); } catch(TypeLoadException e) { throw new InvalidOperationException("Type could " + "not be created. Check innerException " + "for details", e); } return objreflect; } }; public interface IReflect { string Name { get; } }; class Reflect1 : IReflect { public string Name { get { return "Reflect 1"; } } }; class Reflect2 : IReflect{ public string Name { get { return "Reflect 2"; } } } class AbstractFactoryApp { static void Main(string[] args) { callReflection(args[0]); } static void callReflection(string strClassName) { IReflect objReflect; AbstractFactory objFactory = new AbstractFactory(); try { objReflect = objFactory.CreateObject(strClassName); Console.WriteLine("You constructed a {0} object",objReflect.Name); } catch(Exception e) { Console.WriteLine("ERROR: {0}\n{1}", e.Message, (null == e.InnerException ? "" : e.InnerException.Message)); } } }