Questo articolo è stato tradotto automaticamente. Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

Metodo Type.GetConstructor (BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

 

Data di pubblicazione: ottobre 2016

Cerca il costruttore i cui parametri corrispondono ai tipi di argomenti e ai modificatori specificati, usando i vincoli di binding e la convenzione di chiamata specificati.

Spazio dei nomi:   System
Assembly:  mscorlib (in mscorlib.dll)

[ComVisibleAttribute(true)]
public ConstructorInfo GetConstructor(
	BindingFlags bindingAttr,
	Binder binder,
	CallingConventions callConvention,
	Type[] types,
	ParameterModifier[] modifiers
)

Parametri

bindingAttr
Type: System.Reflection.BindingFlags

Maschera di bit costituita da uno o più BindingFlags che consente di specificare le modalità di esecuzione della ricerca.

-oppure-

Zero, per restituire null.

binder
Type: System.Reflection.Binder

Oggetto che definisce una serie di proprietà e permette il binding, che può implicare la scelta di un metodo di overload, la coercizione di tipi di argomento e la chiamata di un membro mediante reflection.

-oppure-

Riferimento Null (Nothing in Visual Basic) per l'uso di DefaultBinder.

callConvention
Type: System.Reflection.CallingConventions

Oggetto che specifica il set di regole da usare per l'ordine e il layout degli argomenti, la modalità di passaggio del valore restituito, i Registri di sistema usati per gli argomenti e la pulizia dello stack.

types
Type: System.Type[]

Matrice di oggetti Type che rappresenta numero, ordine e tipo dei parametri relativi al costruttore da ottenere.

-oppure-

Matrice vuota di tipo Type (ovvero Type[] types = new Type[0]) per ottenere un costruttore che non accetta parametri.

modifiers
Type: System.Reflection.ParameterModifier[]

Matrice di oggetti ParameterModifier che rappresentano gli attributi associati all'elemento corrispondente nella matrice types. Questo parametro non viene elaborato dal binder predefinito.

Valore restituito

Type: System.Reflection.ConstructorInfo

Oggetto che rappresenta il costruttore corrispondente ai requisiti specificati, se è stato trovato; in caso contrario, null.

Exception Condition
ArgumentNullException

types è null.

-oppure-

Uno degli elementi in types è null.

ArgumentException

types è multidimensionale.

-oppure-

modifiers è multidimensionale.

-oppure-

types e modifiers non hanno la stessa lunghezza.

Anche se il binder predefinito elabora ParameterModifier (il modifiers parametro), è possibile utilizzare la classe astratta System.Reflection.Binder classe per la scrittura di un gestore di associazione personalizzato che elaborano modifiers. ParameterModifierviene utilizzato solo quando una chiamata tramite l'interoperabilità COM, e vengono gestiti solo i parametri che vengono passati per riferimento.

Se non esiste una corrispondenza esatta, la binder tenterà di assegnare forzatamente i tipi di parametro specificati nel types matrice per selezionare una corrispondenza. Se il binder non è in grado di selezionare una corrispondenza, quindi null viene restituito.

Le operazioni seguenti BindingFlags flag del filtro può essere utilizzato per definire i costruttori da includere nella ricerca:

  • È necessario specificare BindingFlags.Instance o BindingFlags.Static per ottenere un risultato.

  • Specificare BindingFlags.Public per includere i costruttori pubblici nella ricerca.

  • Specificare BindingFlags.NonPublic per includere nella ricerca i costruttori pubblici (ovvero, i costruttori privati, interni e protetti).

Per altre informazioni, vedere System.Reflection.BindingFlags.

Per ottenere l'inizializzatore di classi (. cctor) tramite questo metodo, è necessario specificare BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). È inoltre possibile ottenere l'inizializzatore di classi tramite il TypeInitializer proprietà.

La tabella seguente mostra quali vengono restituiti dai membri di una classe di base di Get metodi durante la reflection su un tipo.

Tipo di membro

Statico

Non statico

Costruttore

No

No

Campo

No

Sì. Un campo è sempre Nascondi in base al nome e-firma.

Evento

Non applicabile

La regola di sistema di tipo comune è che l'ereditarietà è uguale a quello dei metodi che implementa la proprietà. La reflection gestisce proprietà come Nascondi in base al nome e-firma. Vedere la nota 2 di seguito.

Metodo

No

Sì. Un metodo (virtuale e non virtuale) può essere hide-by-name o Nascondi in base al nome e-firma.

Tipo annidato

No

No

Proprietà

Non applicabile

La regola di sistema di tipo comune è che l'ereditarietà è uguale a quello dei metodi che implementa la proprietà. La reflection gestisce proprietà come Nascondi in base al nome e-firma. Vedere la nota 2 di seguito.

  1. Nascondi in base al nome e-firma prende in considerazione tutte le parti della firma, compresi i modificatori personalizzati, restituire tipi, tipi di parametri, elementi sentinel e convenzioni di chiamata non gestite. Si tratta di un confronto binario.

  2. Per la reflection, proprietà ed eventi sono Nascondi in base al nome e-firma. Se si dispone di una proprietà con sia un'operazione get e set nella classe base, ma la classe derivata contiene solo una funzione di accesso get, la proprietà della classe derivata nasconde la proprietà di classe di base e non sarà in grado di accedere il setter sulla classe di base.

  3. Attributi personalizzati non fanno parte di common type system.

System_CAPS_noteNota

È possibile omettere i parametri per la ricerca di costruttori e metodi. È possibile omettere i parametri solo quando viene richiamato.

Se l'oggetto corrente Type rappresenta un tipo generico costruito, questo metodo restituisce il ConstructorInfo con i parametri di tipo sostituiti dagli argomenti di tipo appropriato. Se l'oggetto corrente Type rappresenta un parametro di tipo nella definizione di un tipo generico o un metodo generico, questo metodo restituisce sempre null.

Nell'esempio seguente viene ottenuto il tipo di MyClass1, ottiene il ConstructorInfo oggetto che corrisponde ai flag di associazione specificato e Visualizza la firma del costruttore.

using System;
using System.Reflection;
using System.Security;

public class MyClass1
{
    public MyClass1(int i){}
    public static void Main()
    {
        try
        {
            Type  myType = typeof(MyClass1);
            Type[] types = new Type[1];
            types[0] = typeof(int);
            // Get the public instance constructor that takes an integer parameter.
            ConstructorInfo constructorInfoObj = myType.GetConstructor(
                BindingFlags.Instance | BindingFlags.Public, null,
                CallingConventions.HasThis, types, null);
            if(constructorInfoObj != null)
            {
                Console.WriteLine("The constructor of MyClass1 that is a public " +
                    "instance method and takes an integer as a parameter is: ");
                Console.WriteLine(constructorInfoObj.ToString());
            }
            else
            {
                Console.WriteLine("The constructor of MyClass1 that is a public instance " +
                    "method and takes an integer as a parameter is not available.");
            }
        }
        catch(ArgumentNullException e)
        {
            Console.WriteLine("ArgumentNullException: " + e.Message);
        }
        catch(ArgumentException e)
        {
            Console.WriteLine("ArgumentException: " + e.Message);
        }
        catch(SecurityException e)
        {
            Console.WriteLine("SecurityException: " + e.Message);
        }
        catch(Exception e)
        {
            Console.WriteLine("Exception: " + e.Message);
        }
    }
}

.NET Framework
Disponibile da 1.1
Torna all'inizio
Mostra: