Leer en inglés

Compartir vía


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)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

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.

C#
public object? CreateInstance (string typeName);
C#
public object CreateInstance (string typeName);

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.

C#
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'

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

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.5, 1.6, 2.0, 2.1

CreateInstance(String, Boolean)

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

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.

C#
public object? CreateInstance (string typeName, bool ignoreCase);
C#
public object CreateInstance (string typeName, bool ignoreCase);

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.

C#
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'

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

.NET 9 otras versiones
Producto Versiones
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.5, 1.6, 2.0, 2.1

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

Source:
Assembly.cs
Source:
Assembly.cs
Source:
Assembly.cs

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.

C#
public virtual object? CreateInstance (string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder? binder, object[]? args, System.Globalization.CultureInfo? culture, object[]? activationAttributes);
C#
public virtual object CreateInstance (string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);
C#
public object CreateInstance (string typeName, bool ignoreCase, System.Reflection.BindingFlags bindingAttr, System.Reflection.Binder binder, object[] args, System.Globalization.CultureInfo culture, object[] activationAttributes);

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

.NET 9 otras versiones
Producto Versiones
.NET Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 2.0, 2.1