Assembly.CreateInstance Método

Definição

Localiza um tipo a partir deste conjunto e cria uma instância dele usando o ativador do sistema.

Sobrecargas

Name Description
CreateInstance(String)

Localiza o tipo especificado a partir deste conjunto e cria uma instância dele usando o ativador do sistema, usando pesquisa sensível a maiúsculas minúsculas.

CreateInstance(String, Boolean)

Localiza o tipo especificado a partir deste conjunto e cria uma instância dele usando o ativador do sistema, com pesquisa opcional a maiúsculas e minúsculas.

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Localiza o tipo especificado a partir deste assembly e cria uma instância dele usando o ativador do sistema, com pesquisa opcional a maiúsculas e minúsculas e com os atributos de cultura, argumentos, ligação e ativação especificados.

CreateInstance(String)

Localiza o tipo especificado a partir deste conjunto e cria uma instância dele usando o ativador do sistema, usando pesquisa sensível a maiúsculas minúsculas.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName);
public:
 System::Object ^ CreateInstance(System::String ^ typeName);
public object CreateInstance(string typeName);
abstract member CreateInstance : string -> obj
override this.CreateInstance : string -> obj
member this.CreateInstance : string -> obj
Public Function CreateInstance (typeName As String) As Object

Parâmetros

typeName
String

O FullName tipo a localizar.

Devoluções

Uma instância do tipo especificado criada com o construtor sem parâmetros; ou null se typeName não for encontrado. O tipo é resolvido usando o fichário padrão, sem especificar cultura ou atributos de ativação, e com BindingFlags definido como Public ou Instance.

Implementações

Exceções

typeName é uma cadeia vazia ("") ou uma cadeia que começa com um carácter nulo.

-ou-

O conjunto atual foi carregado no contexto apenas de reflexão.

typeName é null.

Não foi encontrado nenhum construtor correspondente.

typeName requer um assembly dependente que não foi encontrado.

typeName requer um conjunto dependente que foi encontrado mas não pôde ser carregado.

-ou-

O conjunto de corrente foi carregado no contexto apenas de reflexão e typeName requer um conjunto dependente que não foi pré-carregado.

typeName requer uma montagem dependente, mas o ficheiro não é uma assembly válida para o runtime atualmente carregado.

Exemplos

O exemplo seguinte define uma Person classe e chama o CreateInstance(String) método para a instanciar.

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;

      public Person()
      { }

      public Person(string name)
      {
         this._name = name;
      }

      public string Name
      { get { return this._name; }
        set { this._name = value; } }

      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance("Contoso.Libraries.Person");
      if (!(p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object.");
      }
   }
}
// The example displays the following output:
//        Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance("Contoso.Libraries.Person"),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object.")
      End If   
   End Sub
End Module
' The example displays the following output:
'       Instantiated a Person object whose value is 'John'

Observações

Se o tempo de execução não conseguir encontrar typeName na Assembly instância, ele retorna null em vez de lançar uma exceção. Isto pode acontecer porque:

  • Não especificou o nome totalmente qualificado do tipo.

  • Especificou o nome do tipo totalmente qualificado, mas o seu caso não corresponde ao caso da propriedade do Type.FullName tipo. Para uma comparação insensível a maiúsculas e minúsculas com typeName o nome completo do tipo, chame a CreateInstance(String, Boolean) sobrecarga e especifique true para o ignoreCase argumento.

  • O tipo não existe na instância atual Assembly .

Aplica-se a

CreateInstance(String, Boolean)

Localiza o tipo especificado a partir deste conjunto e cria uma instância dele usando o ativador do sistema, com pesquisa opcional a maiúsculas e minúsculas.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public:
 System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase);
public object CreateInstance(string typeName, bool ignoreCase);
abstract member CreateInstance : string * bool -> obj
override this.CreateInstance : string * bool -> obj
member this.CreateInstance : string * bool -> obj
Public Function CreateInstance (typeName As String, ignoreCase As Boolean) As Object

Parâmetros

typeName
String

O FullName tipo a localizar.

ignoreCase
Boolean

true ignorar o caso do nome do tipo; caso contrário, false.

Devoluções

Uma instância do tipo especificado criada com o construtor sem parâmetros; ou null se typeName não for encontrado. O tipo é resolvido usando o fichário padrão, sem especificar cultura ou atributos de ativação, e com BindingFlags definido como Public ou Instance.

Implementações

Exceções

typeName é uma cadeia vazia ("") ou uma cadeia que começa com um carácter nulo.

-ou-

O conjunto atual foi carregado no contexto apenas de reflexão.

Não foi encontrado nenhum construtor correspondente.

typeName é null.

typeName requer um assembly dependente que não foi encontrado.

typeName requer um conjunto dependente que foi encontrado mas não pôde ser carregado.

-ou-

O conjunto de corrente foi carregado no contexto apenas de reflexão e typeName requer um conjunto dependente que não foi pré-carregado.

typeName requer uma montagem dependente, mas o ficheiro não é uma assembly válida para o runtime atualmente carregado.

Exemplos

O exemplo seguinte define uma Person classe. Depois chama o CreateInstance(String) método para o instanciar, mas como o caso do typeName argumento não corresponde ao da propriedade do FullName tipo, o método devolve null. Quando o exemplo passa a mesma cadeia para a CreateInstance(String, Boolean) sobrecarga e especifica que a comparação deve ser indistinta a maiúsculas e minúsculas, a Person classe é encontrada e um Person objeto é instanciado com sucesso.

using System;
using System.Reflection;
using Contoso.Libraries;

namespace Contoso.Libraries
{
   public class Person
   {
      private string _name;

      public Person()
      { }

      public Person(string name)
      {
         this._name = name;
      }

      public string Name
      { get { return this._name; }
        set { this._name = value; } }

      public override string ToString()
      {
         return this._name;
      }
   }
}

public class Example
{
   public static void Main()
   {
      String fullName = "contoso.libraries.person";
      Assembly assem = typeof(Person).Assembly;
      Person p = (Person) assem.CreateInstance(fullName);
      if (!(p == null)) {
         p.Name = "John";
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p);
      }
      else {
         Console.WriteLine("Unable to instantiate a Person object " +
                           "with Assembly.CreateInstance(String)");
         // Try case-insensitive type name comparison.
         p = (Person) assem.CreateInstance(fullName, true);
         if (!(p == null)) {
            p.Name = "John";
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p);
         }
         else {
            Console.WriteLine("Unable to instantiate a {0} object.",
                              fullName);
         }
      }
   }
}
// The example displays the following output:
//    Unable to instantiate a Person object with Assembly.CreateInstance(String)
//    Instantiated a Person object whose value is 'John'
Imports System.Reflection
Imports Contoso.Libraries

Namespace Contoso.Libraries
   Public Class Person
      Private _name As String 
   
      Public Sub New()
      End Sub 
   
      Public Sub New(name As String)
         Me._name = name
      End Sub 
   
      Public Property Name As String 
         Get 
            Return Me._name
         End Get 
         Set 
            Me._name = value
         End Set 
      End Property 
   
      Public Overrides Function ToString() As String 
         Return Me._name
      End Function 
   End Class
End Namespace 

Module Example
   Public Sub Main()
      Dim fullName As String = "contoso.libraries.person"
      Dim assem As Assembly = GetType(Person).Assembly
      Dim p As Person = CType(assem.CreateInstance(fullName),
                              Person)
      If p IsNot Nothing Then
         p.Name = "John"
         Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                           p.GetType().Name, p)
      Else
         Console.WriteLine("Unable to instantiate a Person object" +
                           "with Assembly.CreateInstance(String)")
         ' Try case-insensitive type name comparison.
         p = CType(assem.CreateInstance(fullName, true), Person)
         If p IsNot Nothing Then 
            p.Name = "John"
            Console.WriteLine("Instantiated a {0} object whose value is '{1}'",
                              p.GetType().Name, p)
         Else 
            Console.WriteLine("Unable to instantiate a {0} object.", 
                              fullName)
         End If   
      End If   
   End Sub
End Module
' The example displays the following output:
'    Unable to instantiate a Person object with Assembly.CreateInstance(String)
'    Instantiated a Person object whose value is 'John'

Observações

Se o tempo de execução não conseguir encontrar typeName na Assembly instância, ele retorna null em vez de lançar uma exceção. Isto pode acontecer porque:

  • Não especificou o nome totalmente qualificado do tipo.

  • O tipo não existe na instância atual Assembly .

Aplica-se a

CreateInstance(String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])

Localiza o tipo especificado a partir deste assembly e cria uma instância dele usando o ativador do sistema, com pesquisa opcional a maiúsculas e minúsculas e com os atributos de cultura, argumentos, ligação e ativação especificados.

public:
 virtual System::Object ^ CreateInstance(System::String ^ typeName, bool ignoreCase, System::Reflection::BindingFlags bindingAttr, System::Reflection::Binder ^ binder, cli::array <System::Object ^> ^ args, System::Globalization::CultureInfo ^ culture, cli::array <System::Object ^> ^ activationAttributes);
public object CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
public virtual object CreateInstance(string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
abstract member CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
override this.CreateInstance : string * bool * System.Reflection.BindingFlags * System.Reflection.Binder * obj[] * System.Globalization.CultureInfo * obj[] -> obj
Public Function CreateInstance (typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object
Public Overridable Function CreateInstance (typeName As String, ignoreCase As Boolean, bindingAttr As BindingFlags, binder As Binder, args As Object(), culture As CultureInfo, activationAttributes As Object()) As Object

Parâmetros

typeName
String

O FullName tipo a localizar.

ignoreCase
Boolean

true ignorar o caso do nome do tipo; caso contrário, false.

bindingAttr
BindingFlags

Uma máscara de bits que afeta a forma como a pesquisa é realizada. O valor é uma combinação de flags de bits de BindingFlags.

binder
Binder

Um objeto que permite a vinculação, coerção de tipos de argumentos, invocação de membros e recuperação de MemberInfo objetos através de reflexão. Se binder for null, utiliza-se o dossier padrão.

args
Object[]

Um array que contém os argumentos a serem passados ao construtor. Este array de argumentos deve corresponder em número, ordem e tipo aos parâmetros do construtor a ser invocado. Se o construtor sem parâmetros for desejado, args deve ser um array vazio ou null.

culture
CultureInfo

Um exemplo de CultureInfo usado para governar a coerção de tipos. Se for null, usa-se para CultureInfo a thread atual. (Isto é necessário para converter uma cadeia que representa 1000 num Double valor, por exemplo, uma vez que 1000 é representado de forma diferente por diferentes culturas.)

activationAttributes
Object[]

Um conjunto de um ou mais atributos que podem participar na ativação. Normalmente, um array que contém um único UrlAttribute objeto que especifica a URL necessária para ativar um objeto remoto. Este parâmetro está relacionado com objetos ativados pelo cliente. A ativação por clientes é uma tecnologia legada que é mantida para compatibilidade retroativa, mas não é recomendada para novos desenvolvimentos. As aplicações distribuídas deveriam antes usar o Windows Communication Foundation.

Devoluções

Uma instância do tipo especificado, ou null se typeName não for encontrada. Os argumentos fornecidos são usados para resolver o tipo e para vincular o construtor que é usado para criar a instância.

Implementações

Exceções

typeName é uma cadeia vazia ("") ou uma cadeia que começa com um carácter nulo.

-ou-

O conjunto atual foi carregado no contexto apenas de reflexão.

typeName é null.

Não foi encontrado nenhum construtor correspondente.

Um array de atributos de ativação não vazio é passado para um tipo que não herda de MarshalByRefObject.

typeName requer um assembly dependente que não foi encontrado.

typeName requer um conjunto dependente que foi encontrado mas não pôde ser carregado.

-ou-

O conjunto de corrente foi carregado no contexto apenas de reflexão e typeName requer um conjunto dependente que não foi pré-carregado.

typeName requer uma montagem dependente, mas o ficheiro não é uma assembly válida para o runtime atualmente carregado.

Aplica-se a