.NET Framework-Klassenbibliothek
Type.GetConstructor-Methode (BindingFlags, Binder, CallingConventions, Type[], ParameterModifier[])

Sucht einen Konstruktor, dessen Parameter den angegebenen Argumenttypen und -modifizierern entsprechen, und berücksichtigt dabei die angegebenen Bindungseinschränkungen und die angegebene Aufrufkonvention.

Namespace: System
Assembly: mscorlib (in mscorlib.dll)

Syntax

Visual Basic (Deklaration)
<ComVisibleAttribute(True)> _
Public Function GetConstructor ( _
    bindingAttr As BindingFlags, _
    binder As Binder, _
    callConvention As CallingConventions, _
    types As Type(), _
    modifiers As ParameterModifier() _
) As ConstructorInfo
Visual Basic (Verwendung)
Dim instance As Type
Dim bindingAttr As BindingFlags
Dim binder As Binder
Dim callConvention As CallingConventions
Dim types As Type()
Dim modifiers As ParameterModifier()
Dim returnValue As ConstructorInfo

returnValue = instance.GetConstructor(bindingAttr, binder, callConvention, types, modifiers)
C#
[ComVisibleAttribute(true)] 
public ConstructorInfo GetConstructor (
    BindingFlags bindingAttr,
    Binder binder,
    CallingConventions callConvention,
    Type[] types,
    ParameterModifier[] modifiers
)
C++
[ComVisibleAttribute(true)] 
public:
virtual ConstructorInfo^ GetConstructor (
    BindingFlags bindingAttr, 
    Binder^ binder, 
    CallingConventions callConvention, 
    array<Type^>^ types, 
    array<ParameterModifier>^ modifiers
) sealed
J#
/** @attribute ComVisibleAttribute(true) */ 
public final ConstructorInfo GetConstructor (
    BindingFlags bindingAttr, 
    Binder binder, 
    CallingConventions callConvention, 
    Type[] types, 
    ParameterModifier[] modifiers
)
JScript
ComVisibleAttribute(true) 
public final function GetConstructor (
    bindingAttr : BindingFlags, 
    binder : Binder, 
    callConvention : CallingConventions, 
    types : Type[], 
    modifiers : ParameterModifier[]
) : ConstructorInfo

Parameter

bindingAttr

Eine Bitmaske aus einem oder mehreren BindingFlags, die angeben, wie die Suche durchgeführt wird.

– oder –

0 (null), damit NULL (Nothing in Visual Basic) zurückgegeben wird.

binder

Ein Binder-Objekt, das eine Gruppe von Eigenschaften definiert und eine Bindung ermöglicht. Dazu kann die Auswahl einer überladenen Methode, die Umwandlung von Argumenttypen und der Aufruf eines Members durch Reflektion gehören.

- oder -

NULL (Nothing in Visual Basic), wenn der DefaultBinder verwendet werden soll.

callConvention

Das CallingConventions-Objekt, das die Regeln für die Reihenfolge und das Layout von Argumenten, die Art der Übergabe des Rückgabewerts, die für Argumente zu verwendenden Register und die Art der Bereinigung des Stapels angibt.

types

Ein Array von Type-Objekten, das Anzahl, Reihenfolge und Typ der Parameter des abzurufenden Konstruktors darstellt.

- oder -

Ein leeres Array vom Type-Typ, d. h. Type[] types = new Type[0], zum Abrufen eines Konstruktors, der keine Parameter akzeptiert.

modifiers

Ein Array von ParameterModifier-Objekten, die die Attribute darstellen, die dem entsprechenden Element im types-Array zugeordnet sind. Der Standardbinder verarbeitet diesen Parameter nicht.

Rückgabewert

Ein ConstructorInfo-Objekt, das den Konstruktor darstellt, der den angegebenen Anforderungen entspricht, oder NULL (Nothing in Visual Basic), wenn kein entsprechender Konstruktor gefunden wurde.
Ausnahmen

AusnahmetypBedingung

ArgumentNullException

types ist NULL (Nothing in Visual Basic).

- oder -

Eines der Elemente in types ist NULL (Nothing in Visual Basic).

ArgumentException

types ist mehrdimensional.

- oder -

modifiers ist mehrdimensional.

- oder -

types und modifiers haben nicht dieselbe Länge.

Hinweise

Obwohl der Standardbinder ParameterModifier (den modifiers-Parameter) nicht verarbeitet, können Sie die abstrakte System.Reflection.Binder-Klasse zum Schreiben eines benutzerdefinierten Binders verwenden, der modifiers verarbeitet. ParameterModifier wird nur in Verbindung mit COM-Interop-Aufrufen verwendet, und es werden nur Parameter verarbeitet, die als Verweis übergeben werden.

Das types-Array und das modifiers-Array haben dieselbe Länge. Ein im types-Array angegebener Parameter kann die folgenden im modifiers-Array definierten Attribute besitzen: pdIn, pdOut, pdLcid, pdRetval, pdOptional und pdHasDefault, die [In], [Out], [lcid], [retval], [optional] und einen Wert darstellen, der angibt, ob der Parameter über einen Standardwert verfügt. Die einem Parameter zugeordneten Attribute werden in den Metadaten gespeichert. Sie verbessern die Interoperabilität.

Wenn keine genaue Übereinstimmung vorhanden ist, versucht der binder, die im types-Array angegebenen Parametertypen zu konvertieren, um eine Übereinstimmung auszuwählen. Wenn der binder keine Übereinstimmung auswählen kann, wird NULL (Nothing in Visual Basic) zurückgegeben.

Über die folgenden BindingFlags-Filterflags kann festgelegt werden, welche Konstruktoren in die Suche einbezogen werden:

  • Es wird nur dann ein Ergebnis zurückgegeben, wenn entweder BindingFlags.Instance oder BindingFlags.Static angegeben wird.

  • Geben Sie BindingFlags.Public an, um öffentliche Konstruktoren in die Suche einzubeziehen.

  • Geben Sie BindingFlags.NonPublic an, um nicht öffentliche Konstruktoren, d. h. private und geschützte Konstruktoren, in die Suche einzubeziehen.

Weitere Informationen finden Sie unter System.Reflection.BindingFlags.

Um den Klasseninitialisierer (.cctor) mit dieser Methode abzurufen, müssen Sie Folgendes angeben: BindingFlags.Static | BindingFlags.NonPublic (BindingFlags.StaticOrBindingFlags.NonPublic in Visual Basic). Sie können den Klasseninitialisierer auch mit der TypeInitializer-Eigenschaft abrufen.

Diese Methode gibt NULL (Nothing in Visual Basic) zurück, wenn der angeforderte Konstruktor nicht öffentlich ist und der Aufrufer keine ReflectionPermission zum Reflektieren nicht öffentlicher Methoden außerhalb der aktuellen Assembly besitzt.

In der folgenden Tabelle sind die Member einer Basisklasse aufgeführt, die bei der Reflektion eines Typs von den Get-Methoden zurückgegeben werden.

Membertyp

Statisch

Nicht statisch

Konstruktor

Nein

Nein

Feld

Nein

Ja. Felder sind immer nach Namen und Signatur verdeckt.

Ereignis

Nicht zutreffend

Im allgemeinen Typsystem ist die Vererbung i. d. R. dieselbe wie die Vererbung der Methoden, die die Eigenschaft implementieren. Die Reflektion behandelt Eigenschaften als nach Namen und Signatur verdeckt. Siehe Hinweis 2 unten.

Methode

Nein

Ja. Eine Methode, virtuell oder nicht virtuell, kann nach Namen oder nach Namen und Signatur verdeckt sein.

Geschachtelter Typ

Nein

Nein

Eigenschaft

Nicht zutreffend

Im allgemeinen Typsystem ist die Vererbung i. d. R. dieselbe wie die Vererbung der Methoden, die die Eigenschaft implementieren. Die Reflektion behandelt Eigenschaften als nach Namen und Signatur verdeckt. Siehe Hinweis 2 unten.

  1. Beim Verdecken nach Namen und Signatur werden alle Teile der Signatur berücksichtigt. Dies schließt benutzerdefinierte Modifizierer, Rückgabetypen, Parametertypen, Sentinels und nicht verwaltete Aufrufkonventionen ein. Dies ist ein binärer Vergleich.

  2. Die Reflektion behandelt Eigenschaften und Ereignisse als nach Namen und Signatur verdeckt. Wenn eine Eigenschaft in einer Basisklasse sowohl einen Get-Accessor als auch einen Set-Accessor, in einer abgeleiteten Klasse hingegen nur einen Get-Accessor besitzt, verdeckt die Eigenschaft der abgeleiteten Klasse die Eigenschaft der Basisklasse, und der Set-Accessor der Basisklasse ist nicht mehr zugänglich.

  3. Benutzerdefinierte Attribute sind nicht Teil des allgemeinen Typsystems.

HinweisHinweis

Bei der Suche nach Konstruktoren oder Methoden dürfen keine Parameter ausgelassen werden. Nur beim Aufruf können Parameter ausgelassen werden.

Wenn der aktuelle Type einen konstruierten generischen Typ darstellt, gibt diese Methode die ConstructorInfo zurück, wobei die Typparameter durch die entsprechenden Typargumente ersetzt wurden. Wenn der aktuelle Type einen Typparameter in der Definition eines generischen Typs oder einer generischen Methoden darstellt, gibt diese Methode immer NULL (Nothing in Visual Basic) zurück.

Beispiel

Im folgenden Beispiel werden der Typ von MyClass1 und das ConstructorInfo-Objekt abgerufen, das den angegebenen Bindungsflags entspricht, und die Signatur des Konstruktors wird angezeigt.

Visual Basic
Public Class MyClass1
    Public Sub New(ByVal i As Integer)
    End Sub
    Public Shared Sub Main()
        Try
            Dim myType As Type = GetType(MyClass1)
            Dim types(0) As Type
            types(0) = GetType(Integer)
            ' Get the public instance constructor that takes an integer parameter.
            Dim constructorInfoObj As ConstructorInfo = _
                        myType.GetConstructor(BindingFlags.Instance Or _
                        BindingFlags.Public, Nothing, _
                        CallingConventions.HasThis, types, Nothing)
            If Not (constructorInfoObj Is Nothing) Then
                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 MyClass1 that " + _
                                  "is a public instance method and takes an " + _
                                  "integer as a parameter is not available.")
            End If
        Catch e As ArgumentNullException
            Console.WriteLine("ArgumentNullException: " + e.Message)
        Catch e As ArgumentException
            Console.WriteLine("ArgumentException: " + e.Message)
        Catch e As SecurityException
            Console.WriteLine("SecurityException: " + e.Message)
        Catch e As Exception
            Console.WriteLine("Exception: " + e.Message)
        End Try
    End Sub
End Class
C#
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);
        }
    }
}
C++
using namespace System;
using namespace System::Reflection;
using namespace System::Security;
public ref class MyClass1
{
public:
   MyClass1( int i ){}

};

int main()
{
   try
   {
      Type^ myType = MyClass1::typeid;
      array<Type^>^types = gcnew array<Type^>(1);
      types[ 0 ] = int::typeid;
      
      // Get the public instance constructor that takes an integer parameter.
      ConstructorInfo^ constructorInfoObj = myType->GetConstructor( static_cast<BindingFlags>(BindingFlags::Instance | BindingFlags::Public), nullptr, CallingConventions::HasThis, types, nullptr );
      if ( constructorInfoObj != nullptr )
      {
         Console::WriteLine( "The constructor of MyClass1 that is a public instance method and takes an integer as a parameter is: " );
         Console::WriteLine( constructorInfoObj );
      }
      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: {0}", e->Message );
   }
   catch ( ArgumentException^ e ) 
   {
      Console::WriteLine( "ArgumentException: {0}", e->Message );
   }
   catch ( SecurityException^ e ) 
   {
      Console::WriteLine( "SecurityException: {0}", e->Message );
   }
   catch ( Exception^ e ) 
   {
      Console::WriteLine( "Exception: {0}", e->Message );
   }
}
J#
import System.*;
import System.Reflection.*;
import System.Security.*;

public class MyClass1
{
    public MyClass1(int i)
    {
    } //MyClass1

    public static void main(String[] args)
    {
        try {
            Type myType = MyClass1.class.ToType();
            Type types[] = new Type[1];
            types.set_Item(0, int.class.ToType());
            // 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.get_Message());
        }
        catch (ArgumentException e) {
            Console.WriteLine("ArgumentException: " + e.get_Message());
        }
        catch (SecurityException e) {
            Console.WriteLine("SecurityException: " + e.get_Message());
        }
        catch (System.Exception e) {
            Console.WriteLine("Exception: " + e.get_Message());
        }
    } //main
} //MyClass1
.NET Framework-Sicherheit

Plattformen

Windows 98, Windows 2000 SP4, Windows Millennium Edition, Windows Server 2003, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP SP2, Windows XP Starter Edition

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen.

Versionsinformationen

.NET Framework

Unterstützt in: 2.0, 1.1, 1.0
Siehe auch

Page view tracker