Erweitern Minimieren
Dieser Artikel wurde maschinell übersetzt. Bewegen Sie den Mauszeiger über die Sätze im Artikel, um den Originaltext anzuzeigen. Weitere Informationen
Übersetzung
Original
Dieser Artikel wurde noch nicht bewertet - Dieses Thema bewerten.

Type.DeclaringMethod-Eigenschaft

Ruft eine MethodBase ab, die die deklarierende Methode darstellt, wenn der aktuelle Type einen Typparameter einer generischen Methode darstellt.

Namespace:  System
Assembly:  mscorlib (in mscorlib.dll)
public virtual MethodBase DeclaringMethod { get; }

Eigenschaftswert

Typ: System.Reflection.MethodBase
Eine MethodBase, die die deklarierende Methode darstellt, wenn der aktuelle Type einen Typparameter einer generischen Methode darstellt, andernfalls null.

Die deklarierende Methode ist eine generische Methodendefinition. Das heißt, wenn DeclaringMethod nicht null zurückgibt, dann gibt DeclaringMethod.IsGenericMethodDefinitiontrue zurück.

Die DeclaringType-Eigenschaft und die DeclaringMethod-Eigenschaft identifizieren die generische Typ- oder Methodendefinition, in der der generische Typparameter ursprünglich definiert wurde:

  • Wenn die DeclaringMethod-Eigenschaft eine MethodInfo zurückgibt, stellt diese MethodInfo eine generische Methodendefinition dar, und das aktuelle Type-Objekt stellt einen Typparameter dieser generischen Methodendefinition dar.

  • Wenn die DeclaringMethod-Eigenschaft null zurückgibt, gibt die DeclaringType-Eigenschaft immer ein Type-Objekt zurück, das eine generische Typdefinition darstellt, und das aktuelle Type-Objekt stellt einen Typparameter dieser generischen Typdefinition dar.

  • Das Abrufen der DeclaringMethod-Eigenschaft für einen Typ, dessen IsGenericParameter-Eigenschaft false ist, löst eine InvalidOperationException aus.

Die von der DeclaringMethod-Eigenschaft zurückgegebene MethodBase ist bei einer generischen Methode eine MethodInfo und bei einem generischen Konstruktor eine ConstructorInfo.

HinweisHinweis

In .NET Framework, Version 2.0, werden generische Konstruktoren nicht unterstützt.

Eine Liste der unveränderlichen Bedingungen für allgemeine Begriffe, die in generischer Reflektion verwendet werden, finden Sie in den Hinweisen zur IsGenericType-Eigenschaft.

Im folgenden Codebeispiel wird eine Klasse mit einer generischen Methode definiert, der Methode ein Typargument zugewiesen und die resultierende konstruierte generische Methode aufgerufen. Außerdem werden Informationen über die generische Methodendefinition und die konstruierte Methode angezeigt. Wenn im Beispiel mithilfe der DisplayGenericMethodInfo-Methode Informationen über die Typparameter der generischen Methodendefinition angezeigt werden, wird der Wert der DeclaringMethod-Eigenschaft für den generischen Typparameter der Methode angezeigt.


using System;
using System.Reflection;

// Define a class with a generic method.
public class Example
{
    public static void Generic<T>(T toDisplay)
    {
        Console.WriteLine("\r\nHere it is: {0}", toDisplay);
    }
}

public class Test
{
    public static void Main()
    {
        Console.WriteLine("\r\n--- Examine a generic method.");

        // Create a Type object representing class Example, and
        // get a MethodInfo representing the generic method.
        //
        Type ex = typeof(Example);
        MethodInfo mi = ex.GetMethod("Generic");

        DisplayGenericMethodInfo(mi);

        // Assign the int type to the type parameter of the Example 
        // method.
        //
        MethodInfo miConstructed = mi.MakeGenericMethod(typeof(int));

        DisplayGenericMethodInfo(miConstructed);

        // Invoke the method.
        object[] args = {42};
        miConstructed.Invoke(null, args);

        // Invoke the method normally.
        Example.Generic<int>(42);

        // Get the generic type definition from the closed method,
        // and show it's the same as the original definition.
        //
        MethodInfo miDef = miConstructed.GetGenericMethodDefinition();
        Console.WriteLine("\r\nThe definition is the same: {0}",
            miDef == mi);
    }

    private static void DisplayGenericMethodInfo(MethodInfo mi)
    {
        Console.WriteLine("\r\n{0}", mi);

        Console.WriteLine("\tIs this a generic method definition? {0}", 
            mi.IsGenericMethodDefinition);

        Console.WriteLine("\tIs it a generic method? {0}", 
            mi.IsGenericMethod);

        Console.WriteLine("\tDoes it have unassigned generic parameters? {0}", 
            mi.ContainsGenericParameters);

        // If this is a generic method, display its type arguments.
        //
        if (mi.IsGenericMethod)
        {
            Type[] typeArguments = mi.GetGenericArguments();

            Console.WriteLine("\tList type arguments ({0}):", 
                typeArguments.Length);

            foreach (Type tParam in typeArguments)
            {
                // IsGenericParameter is true only for generic type
                // parameters.
                //
                if (tParam.IsGenericParameter)
                {
                    Console.WriteLine("\t\t{0}  parameter position {1}" +
                        "\n\t\t   declaring method: {2}",
                        tParam,
                        tParam.GenericParameterPosition,
                        tParam.DeclaringMethod);
                }
                else
                {
                    Console.WriteLine("\t\t{0}", tParam);
                }
            }
        }
    }
}

/* This example produces the following output:

--- Examine a generic method.

Void Generic[T](T)
        Is this a generic method definition? True
        Is it a generic method? True
        Does it have unassigned generic parameters? True
        List type arguments (1):
                T  parameter position 0
                   declaring method: Void Generic[T](T)

Void Generic[Int32](Int32)
        Is this a generic method definition? False
        Is it a generic method? True
        Does it have unassigned generic parameters? False
        List type arguments (1):
                System.Int32

Here it is: 42

Here it is: 42

The definition is the same: True

 */


.NET Framework

Unterstützt in: 4.5, 4, 3.5, 3.0, 2.0

.NET Framework Client Profile

Unterstützt in: 4, 3.5 SP1

Portable Klassenbibliothek

Unterstützt in: Portable Klassenbibliothek

Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Server Core-Rolle wird nicht unterstützt), Windows Server 2008 R2 (Server Core-Rolle wird mit SP1 oder höher unterstützt; Itanium wird nicht unterstützt)

.NET Framework unterstützt nicht alle Versionen sämtlicher Plattformen. Eine Liste der unterstützten Versionen finden Sie unter Systemanforderungen für .NET Framework.
Fanden Sie dies hilfreich?
(1500 verbleibende Zeichen)

Community-Beiträge

HINZUFÜGEN
© 2013 Microsoft. Alle Rechte vorbehalten.