Assembly.CreateInstance Método

Definición

Localiza un tipo en este ensamblado y crea una instancia de dicho tipo mediante el activador del sistema.

Sobrecargas

CreateInstance(String)

Localiza el tipo especificado en este ensamblado y crea una instancia del tipo mediante el activador del sistema, realizando una búsqueda en la que se distingue entre mayúsculas y minúsculas.

CreateInstance(String, Boolean)

Ubica el tipo especificado de este ensamblado y crea una instancia de dicho tipo mediante el activador del sistema, con búsqueda de mayúsculas y minúsculas opcional.

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

Ubica el tipo especificado en este ensamblado y crea una instancia de dicho tipo mediante el activador del sistema, con búsqueda de mayúsculas y minúsculas opcional y con los atributos de referencia cultural, argumentos, enlace y activación.

CreateInstance(String)

Localiza el tipo especificado en este ensamblado y crea una instancia del tipo mediante el activador del sistema, realizando una búsqueda en la que se distingue entre mayúsculas y 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

FullName del tipo que se va a localizar.

Devoluciones

Instancia del tipo especificado creada con el constructor sin parámetros, o bien null si no se encuentra typeName. El tipo se resuelve usando el enlazador predeterminado, sin especificar atributos de activación o referencia cultural, y con el objeto BindingFlags establecido en Public o Instance.

Implementaciones

Excepciones

typeName es una cadena vacía ("") o una cadena que comienza con un carácter nulo.

o bien

El ensamblado actual se ha cargado en el contexto de solo reflexión.

typeName es null.

No se encontró ningún constructor coincidente.

typeName requiere un ensamblado dependiente que no se pudo encontrar.

typeName requiere un ensamblado dependiente que se encontró, pero no se pudo cargar.

o bien

El ensamblado actual se cargó en el contexto de solo reflexión y typeName requiere un ensamblado dependiente que no se haya cargado previamente.

typeName requiere un ensamblado dependiente, pero el archivo no es un ensamblado válido para el tiempo de ejecución cargado actualmente.

Ejemplos

En el ejemplo siguiente se define una Person clase y se llama al CreateInstance(String) método para crear una instancia de ella.

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'

Comentarios

Si el tiempo de ejecución no se encuentra typeName en la Assembly instancia, devuelve null en lugar de iniciar una excepción. Esto puede ocurrir porque:

  • No ha especificado el nombre completo del tipo.

  • Ha especificado el nombre de tipo completo, pero su caso no coincide con el caso de la propiedad del Type.FullName tipo. Para una comparación sin distinción entre mayúsculas y minúsculas de typeName con el nombre completo del tipo, llame a la CreateInstance(String, Boolean) sobrecarga y especifique true para el ignoreCase argumento .

  • El tipo no existe en la instancia actual Assembly .

Se aplica a

CreateInstance(String, Boolean)

Ubica el tipo especificado de este ensamblado y crea una instancia de dicho tipo mediante el activador del sistema, con búsqueda de mayúsculas y 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

FullName del tipo que se va a localizar.

ignoreCase
Boolean

Es true para no hacer distinción entre mayúsculas y minúsculas en el nombre del tipo; en caso contrario, es false.

Devoluciones

Instancia del tipo especificado creada con el constructor sin parámetros, o bien null si no se encuentra typeName. El tipo se resuelve usando el enlazador predeterminado, sin especificar atributos de activación o referencia cultural, y con el objeto BindingFlags establecido en Public o Instance.

Implementaciones

Excepciones

typeName es una cadena vacía ("") o una cadena que comienza con un carácter nulo.

o bien

El ensamblado actual se ha cargado en el contexto de solo reflexión.

No se encontró ningún constructor coincidente.

typeName es null.

typeName requiere un ensamblado dependiente que no se pudo encontrar.

typeName requiere un ensamblado dependiente que se encontró, pero no se pudo cargar.

o bien

El ensamblado actual se cargó en el contexto de solo reflexión y typeName requiere un ensamblado dependiente que no se haya cargado previamente.

typeName requiere un ensamblado dependiente, pero el archivo no es un ensamblado válido para el tiempo de ejecución cargado actualmente.

Ejemplos

En el ejemplo siguiente se define una clase Person. A continuación, llama al CreateInstance(String) método para crear una instancia de él, pero porque el uso de mayúsculas y minúsculas del typeName argumento no coincide con el de la propiedad del FullName tipo, el método devuelve null. Cuando el ejemplo pasa la misma cadena a la CreateInstance(String, Boolean) sobrecarga y especifica que la comparación debe no distinguir mayúsculas de minúsculas, se encuentra la Person clase y se crea una instancia correcta de un Person objeto.

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'

Comentarios

Si el tiempo de ejecución no se encuentra typeName en la Assembly instancia, devuelve null en lugar de iniciar una excepción. Esto puede ocurrir porque:

  • No ha especificado el nombre completo del tipo.

  • El tipo no existe en la instancia actual Assembly .

Se aplica a

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

Ubica el tipo especificado en este ensamblado y crea una instancia de dicho tipo mediante el activador del sistema, con búsqueda de mayúsculas y minúsculas opcional y con los atributos de referencia cultural, argumentos, enlace y activación.

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

FullName del tipo que se va a localizar.

ignoreCase
Boolean

Es true para no hacer distinción entre mayúsculas y minúsculas en el nombre del tipo; en caso contrario, es false.

bindingAttr
BindingFlags

Máscara de bits que afecta al modo de realizar la búsqueda. El valor es una combinación de marcadores de bits de BindingFlags.

binder
Binder

Objeto que habilita el enlace, la conversión de tipos de argumentos, las llamadas a miembros y la recuperación de objetos MemberInfo mediante reflexión. Si binder es null, se usa el enlazador predeterminado.

args
Object[]

Matriz que contiene los argumentos que se pasarán al constructor. Esta matriz de argumentos debe coincidir en número, orden y tipo con los parámetros del constructor al que se va a invocar. Si se desea usar el constructor sin parámetros, args debe ser una matriz vacía o null.

culture
CultureInfo

Instancia de CultureInfo usada para regir la conversión de tipos. Si es null, se utiliza CultureInfo para el subproceso actual. (Esto es necesario para convertir una cadena que representa 1000 en un valor Double, por ejemplo, dado que 1000 se representa de maneras diferentes según la referencia cultural).

activationAttributes
Object[]

Matriz de uno o más atributos que puede participar en la activación. Normalmente, una matriz que contiene un único objeto UrlAttribute que especifica la dirección URL necesaria para activar un objeto remoto. Este parámetro está relacionado con los objetos activados por el cliente. La activación por parte del cliente es una tecnología heredada que se conserva por compatibilidad con versiones anteriores, pero no se recomienda para nuevo desarrollo. Las aplicaciones distribuidas deberían usar Windows Communication Foundation.

Devoluciones

Instancia del tipo especificado, o null si no se encuentra typeName. Los argumentos proporcionados se utilizan para resolver el tipo y para enlazar el constructor que se utiliza para crear la instancia.

Implementaciones

Excepciones

typeName es una cadena vacía ("") o una cadena que comienza con un carácter nulo.

o bien

El ensamblado actual se ha cargado en el contexto de solo reflexión.

typeName es null.

No se encontró ningún constructor coincidente.

Una matriz de atributos de activación no vacía se pasa a un tipo que no hereda de MarshalByRefObject.

typeName requiere un ensamblado dependiente que no se pudo encontrar.

typeName requiere un ensamblado dependiente que se encontró, pero no se pudo cargar.

o bien

El ensamblado actual se cargó en el contexto de solo reflexión y typeName requiere un ensamblado dependiente que no se haya cargado previamente.

typeName requiere un ensamblado dependiente, pero el archivo no es un ensamblado válido para el tiempo de ejecución cargado actualmente.

Se aplica a