Csharp/C Sharp/Reflection/Activator — различия между версиями
Admin (обсуждение | вклад) м (1 версия) |
(нет различий)
|
Текущая версия на 14:38, 26 мая 2010
System.Activator
<source lang="csharp"> 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)); } }
}
</source>