none
Instanciar classe com nome em variavel RRS feed

  • Pergunta

  • Olá Pessoal,

    Tenho o seguinte problema, quero instanciar uma classe, cujo seu nome está dentro de uma variável string, exemplo:

    string X = "NomeDaClasse";

    Quero instanciar a classe cujo seu nome está dentro da variavel X, podem me ajudar?

    Att.

     

    sexta-feira, 5 de novembro de 2010 11:27

Respostas

  • Olá,

    Você pode fazer isto através de Reflection:

    using System.Reflection
    
     public static object createObject(string name, params object[] constructorargs) {
       foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
        foreach (Type typ in asm.GetExportedTypes()) {
         if (typ.FullName == name) 
          return Activator.CreateInstance(typ, constructorargs);
        }
       }
       return null;
      }
    

    Para utilizar o método:

    TextBox box = (TextBox)createObject("System.Windows.Forms.TextBox");
       DateTime dt = (DateTime)createObject("System.DateTime", 2007, 3, 26);
    

    Lembrando que você deve passar o nome completo da classe inclusive o namespace ("System.Windows.Forms.TextBox");

    Existem outras formas por exemplo usando o Type.GetType(string); passando o nome completo do assembly, exemplo:

    "System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

    O link abaixo mostra estas possibilidades:

    http://www.geocities.com/Jeff_Louie/OOP/oop20.htm


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    sexta-feira, 5 de novembro de 2010 12:13

Todas as Respostas

  • Olá,

    Você pode fazer isto através de Reflection:

    using System.Reflection
    
     public static object createObject(string name, params object[] constructorargs) {
       foreach (Assembly asm in AppDomain.CurrentDomain.GetAssemblies()) {
        foreach (Type typ in asm.GetExportedTypes()) {
         if (typ.FullName == name) 
          return Activator.CreateInstance(typ, constructorargs);
        }
       }
       return null;
      }
    

    Para utilizar o método:

    TextBox box = (TextBox)createObject("System.Windows.Forms.TextBox");
       DateTime dt = (DateTime)createObject("System.DateTime", 2007, 3, 26);
    

    Lembrando que você deve passar o nome completo da classe inclusive o namespace ("System.Windows.Forms.TextBox");

    Existem outras formas por exemplo usando o Type.GetType(string); passando o nome completo do assembly, exemplo:

    "System.Windows.Forms.TextBox, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089".

    O link abaixo mostra estas possibilidades:

    http://www.geocities.com/Jeff_Louie/OOP/oop20.htm


    Se o post foi útil marque como resposta. - Advanced Web Application - MCP
    sexta-feira, 5 de novembro de 2010 12:13
  • Prezado(a),

    Estou migrando seu post para o fórum de .NET Development Geral.

    Por favor, das próximas vezes que for postar alguma dúvida referente a esse assunto, poste por lá.

    Obrigado.


    André Alves de Lima
    Visite o meu site: http://www.andrealveslima.com.br
    Me siga no Twitter: @andrealveslima
    sexta-feira, 5 de novembro de 2010 12:32
    Moderador