Csharp/C Sharp/Reflection/Activator

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>