閱讀英文

共用方式為


Type.DeclaringMethod 屬性

定義

如果目前的 MethodBase 表示泛型方法的型別參數,則取得表示宣告方法的 Type

public virtual System.Reflection.MethodBase? DeclaringMethod { get; }
public virtual System.Reflection.MethodBase DeclaringMethod { get; }

屬性值

MethodBase

如果目前的 Type 表示泛型方法的型別參數,則為表示宣告方法的 MethodBase否則為 null

範例

下列程式碼範例會定義具有泛型方法的類別、指派方法的型別引數,並叫用產生的結構化泛型方法。 它也會顯示泛型方法定義和已建立之方法的相關資訊。 當您在方法中顯示泛型方法定義的型別參數的相關資訊時, DisplayGenericMethodInfo 範例程式碼會顯示方法的 DeclaringMethod 泛型型別參數之屬性的值。

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

 */

備註

宣告方法是泛型方法定義。 也就是說,如果不 DeclaringMethod 會傳回 null ,則會 DeclaringMethod.IsGenericMethodDefinition 傳回 true

DeclaringTypeDeclaringMethod 屬性會識別一般定義泛型型別參數的泛型型別定義或泛型方法定義:

MethodBase DeclaringMethod 在泛型方法的情況下,屬性所傳回的會是,如果是泛型函式,則為 MethodInfo ConstructorInfo

注意

在 .NET Framework 2.0 版中,不支援泛型的函式。

如需泛型反映中所使用之規範的恆成立條件清單,請參閱 IsGenericType 屬性備註。

適用於

另請參閱