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));
}
}
}
|