Csharp/C Sharp/Reflection/Activator

Материал из .Net Framework эксперт
Версия от 11:38, 26 мая 2010; Admin (обсуждение | вклад) (1 версия)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

System.Activator

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