Partilhar via


Assembly.CreateInstance Método

Definição

Localiza um tipo nesse assembly e cria uma instância dele, usando o ativador do sistema.

Sobrecargas

CreateInstance(String)

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador de sistema, usando a pesquisa que diferencia maiúsculas de minúsculas.

CreateInstance(String, Boolean)

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador de sistema, com pesquisa que diferencia maiúsculas de minúsculas opcional.

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

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador do sistema, com a pesquisa opcional que diferencia maiúsculas de minúsculas e com a cultura especificada, os argumentos e os atributos de associação e ativação.

CreateInstance(String)

Origem:
Assembly.cs
Origem:
Assembly.cs
Origem:
Assembly.cs

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador de sistema, usando a pesquisa que diferencia maiúsculas de minúsculas.

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

Parâmetros

typeName
String

O FullName do tipo a se localizar.

Retornos

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

Implementações

Exceções

typeName é uma cadeia de caracteres vazia ("") ou que começa com um caractere nulo.

- ou -

O assembly atual foi carregado no contexto de somente reflexão.

typeName é null.

Nenhum construtor correspondente foi encontrado.

typeName requer um assembly dependente que não pôde ser encontrado.

typeName exige um assembly dependente que foi encontrado, mas que não pôde ser carregado.

- ou -

O assembly atual foi carregado no contexto somente reflexão e o typeName exige um assembly dependente que não foi pré-carregado.

typeName requer um assembly dependente, mas o arquivo não é um assembly válido para o runtime carregado no momento.

Exemplos

O exemplo a seguir define uma Person classe e chama o CreateInstance(String) método para instanciá-la.

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'

Comentários

Se o runtime não conseguir localizar typeName na Assembly instância, ele retornará null em vez de gerar uma exceção. Isso pode acontecer porque:

  • Você não especificou o nome totalmente qualificado do tipo.

  • Você especificou o nome de tipo totalmente qualificado, mas seu caso não corresponde ao caso da propriedade do Type.FullName tipo. Para uma comparação que não diferencia maiúsculas de minúsculas de typeName com 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)

Origem:
Assembly.cs
Origem:
Assembly.cs
Origem:
Assembly.cs

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador de sistema, com pesquisa que diferencia maiúsculas de minúsculas opcional.

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

Parâmetros

typeName
String

O FullName do tipo a se localizar.

ignoreCase
Boolean

true para ignorar maiúsculas e minúsculas do nome do tipo; caso contrário, false.

Retornos

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

Implementações

Exceções

typeName é uma cadeia de caracteres vazia ("") ou que começa com um caractere nulo.

- ou -

O assembly atual foi carregado no contexto de somente reflexão.

Nenhum construtor correspondente foi encontrado.

typeName é null.

typeName requer um assembly dependente que não pôde ser encontrado.

typeName exige um assembly dependente que foi encontrado, mas que não pôde ser carregado.

- ou -

O assembly atual foi carregado no contexto somente reflexão e o typeName exige um assembly dependente que não foi pré-carregado.

typeName requer um assembly dependente, mas o arquivo não é um assembly válido para o runtime carregado no momento.

Exemplos

O exemplo a seguir define uma classe Person. Em seguida, ele chama o CreateInstance(String) método para instanciá-lo, mas como o uso de maiúsculas e minúsculas do typeName argumento não corresponde ao da propriedade do FullName tipo, o método retorna null. Quando o exemplo passa a mesma cadeia de caracteres para a CreateInstance(String, Boolean) sobrecarga e especifica que a comparação deve não diferenciar maiúsculas de minúsculas, a Person classe é encontrada e um Person objeto é instanciado com êxito.

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'

Comentários

Se o runtime não conseguir localizar typeName na Assembly instância, ele retornará null em vez de gerar uma exceção. Isso pode acontecer porque:

  • Você 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[])

Origem:
Assembly.cs
Origem:
Assembly.cs
Origem:
Assembly.cs

Localiza o tipo especificado desse assembly e cria uma instância dele usando o ativador do sistema, com a pesquisa opcional que diferencia maiúsculas de minúsculas e com a cultura especificada, os argumentos e os atributos de associação e ativação.

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 virtual 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);
public 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 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
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

Parâmetros

typeName
String

O FullName do tipo a se localizar.

ignoreCase
Boolean

true para ignorar maiúsculas e minúsculas do nome do tipo; caso contrário, false.

bindingAttr
BindingFlags

Um bitmask que afeta a maneira pela qual a pesquisa é realizada. O valor é uma combinação dos sinalizadores de bit de BindingFlags.

binder
Binder

Um objeto que permite a associação, a coerção de tipos de argumentos, invocação de membros e a recuperação de objetos MemberInfo por meio de reflexão. Caso binder seja null, o associador padrão é usado.

args
Object[]

Uma matriz que contém os argumentos a serem passados ao construtor. Essa matriz de argumentos deve corresponder em número, ordem e tipo aos parâmetros do construtor a ser invocado. Caso haja preferência pelo construtor sem parâmetros, args precisará ser uma matriz vazia ou null.

culture
CultureInfo

Uma instância de CultureInfo usada para determinar a coerção de tipos. Se isso for null, será usado o CultureInfo para o thread atual. (Isso é necessário para converter uma cadeia de caracteres que representa 1000 para um valor Double, por exemplo, uma vez que 1000 é representado de maneira diferente por diferentes culturas.)

activationAttributes
Object[]

Uma matriz de um ou mais atributos que podem participar da ativação. Normalmente, uma matriz que contém um único objeto UrlAttribute que especifica a URL necessária para ativar um objeto remoto. Esse parâmetro está relacionado a objetos ativados pelo cliente. A ativação do cliente é uma tecnologia herdada, mantida para compatibilidade com versões anteriores, mas não é recomendada para novos desenvolvimentos. Em vez disso, os aplicativos distribuídos devem usar o Windows Communication Foundation.

Retornos

Uma instância do tipo especificado ou null, se typeName não for encontrado. Os argumentos fornecidos são usados para resolver o tipo e associar o construtor utilizado para criar a instância.

Implementações

Exceções

typeName é uma cadeia de caracteres vazia ("") ou que começa com um caractere nulo.

- ou -

O assembly atual foi carregado no contexto de somente reflexão.

typeName é null.

Nenhum construtor correspondente foi encontrado.

Uma matriz de atributos de ativação não vazia é passada a um tipo que não herda de MarshalByRefObject.

typeName requer um assembly dependente que não pôde ser encontrado.

typeName exige um assembly dependente que foi encontrado, mas que não pôde ser carregado.

- ou -

O assembly atual foi carregado no contexto somente reflexão e o typeName exige um assembly dependente que não foi pré-carregado.

typeName requer um assembly dependente, mas o arquivo não é um assembly válido para o runtime carregado no momento.

Aplica-se a