Type.DeclaringMethod 속성
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
MethodBase 현재 Type 가 제네릭 메서드의 형식 매개 변수를 나타내는 경우 선언 메서드를 나타내는 값을 가져옵니다.
public:
virtual property System::Reflection::MethodBase ^ DeclaringMethod { System::Reflection::MethodBase ^ get(); };
public virtual System.Reflection.MethodBase? DeclaringMethod { get; }
public virtual System.Reflection.MethodBase DeclaringMethod { get; }
member this.DeclaringMethod : System.Reflection.MethodBase
Public Overridable ReadOnly Property DeclaringMethod As 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
*/
open System.Reflection
// Define a class with a generic method.
type Example =
static member Generic<'T>(toDisplay: 'T) =
printfn $"\r\nHere it is: {toDisplay}"
let displayGenericMethodInfo (mi: MethodInfo) =
printfn $"\n{mi}"
printfn $"\tIs this a generic method definition? {mi.IsGenericMethodDefinition}"
printfn $"\tIs it a generic method? {mi.IsGenericMethod}"
printfn $"\tDoes it have unassigned generic parameters? {mi.ContainsGenericParameters}"
// If this is a generic method, display its type arguments.
//
if mi.IsGenericMethod then
let typeArguments = mi.GetGenericArguments()
printfn $"\tList type arguments ({typeArguments.Length}):"
for tParam in typeArguments do
// IsGenericParameter is true only for generic type
// parameters.
if tParam.IsGenericParameter then
printfn $"\t\t{tParam} parameter position {tParam.GenericParameterPosition}\n\t\t declaring method: {tParam.DeclaringMethod}"
else
printfn $"\t\t{tParam}"
printfn "\r\n--- Examine a generic method."
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
let ex = typeof<Example>
let mi = ex.GetMethod "Generic"
displayGenericMethodInfo mi
// Assign the int type to the type parameter of the Example
// method.
//
let miConstructed = mi.MakeGenericMethod typeof<int>
displayGenericMethodInfo miConstructed
// Invoke the method.
let args = [| box 42 |]
miConstructed.Invoke(null, args) |> ignore
// 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.
//
let miDef = miConstructed.GetGenericMethodDefinition()
printfn $"\r\nThe definition is the same: {miDef = mi}"
(* 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
*)
Imports System.Reflection
' Define a class with a generic method.
Public Class Example
Public Shared Sub Generic(Of T)(ByVal toDisplay As T)
Console.WriteLine(vbCrLf & "Here it is: {0}", toDisplay)
End Sub
End Class
Public Class Test
Public Shared Sub Main()
Console.WriteLine(vbCrLf & "--- Examine a generic method.")
' Create a Type object representing class Example, and
' get a MethodInfo representing the generic method.
'
Dim ex As Type = GetType(Example)
Dim mi As MethodInfo = ex.GetMethod("Generic")
DisplayGenericMethodInfo(mi)
' Assign the Integer type to the type parameter of the Example
' method.
'
Dim arguments() As Type = { GetType(Integer) }
Dim miConstructed As MethodInfo = mi.MakeGenericMethod(arguments)
DisplayGenericMethodInfo(miConstructed)
' Invoke the method.
Dim args() As Object = { 42 }
miConstructed.Invoke(Nothing, args)
' Invoke the method normally.
Example.Generic(Of Integer)(42)
' Get the generic type definition from the constructed method,
' and show that it's the same as the original definition.
'
Dim miDef As MethodInfo = miConstructed.GetGenericMethodDefinition()
Console.WriteLine(vbCrLf & "The definition is the same: {0}", _
miDef Is mi)
End Sub
Private Shared Sub DisplayGenericMethodInfo(ByVal mi As MethodInfo)
Console.WriteLine(vbCrLf & mi.ToString())
Console.WriteLine(vbTab _
& "Is this a generic method definition? {0}", _
mi.IsGenericMethodDefinition)
Console.WriteLine(vbTab & "Is it a generic method? {0}", _
mi.IsGenericMethod)
Console.WriteLine(vbTab _
& "Does it have unassigned generic parameters? {0}", _
mi.ContainsGenericParameters)
' If this is a generic method, display its type arguments.
'
If mi.IsGenericMethod Then
Dim typeArguments As Type() = mi.GetGenericArguments()
Console.WriteLine(vbTab & "List type arguments ({0}):", _
typeArguments.Length)
For Each tParam As Type In typeArguments
' IsGenericParameter is true only for generic type
' parameters.
'
If tParam.IsGenericParameter Then
Console.WriteLine(vbTab & vbTab _
& "{0} parameter position: {1}" _
& vbCrLf & vbTab & vbTab _
& " declaring method: {2}", _
tParam, _
tParam.GenericParameterPosition, _
tParam.DeclaringMethod)
Else
Console.WriteLine(vbTab & vbTab & tParam.ToString())
End If
Next tParam
End If
End Sub
End Class
' 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 반환하지 않으면 .를 DeclaringMethod.IsGenericMethodDefinition 반환null합니다true.
및 DeclaringMethod 속성은 DeclaringType 제네릭 형식 매개 변수가 원래 정의된 제네릭 형식 정의 또는 제네릭 메서드 정의를 식별합니다.
속성이 DeclaringMethod 제네릭 메서드 정의를 나타내는 형식 MethodInfo 을 반환MethodInfo하고 현재 Type 개체가 해당 제네릭 메서드 정의의 형식 매개 변수를 나타내는 경우
속성이 DeclaringMethod 반환
null되면 속성은 DeclaringType 항상 제네릭 형식 정의를 나타내는 개체를 반환 Type 하고 현재 Type 개체는 해당 제네릭 형식 정의의 형식 매개 변수를 나타냅니다.속성이 DeclaringMethod throw되는
false형식 IsGenericParameter 에서 속성을 가져옵니다InvalidOperationException.
MethodBase 속성에서 DeclaringMethod 반환되는 값은 MethodInfo 제네릭 메서드의 경우 또는 ConstructorInfo 제네릭 생성자의 경우입니다.
메모
.NET Framework 버전 2.0에서는 제네릭 생성자가 지원되지 않습니다.
제네릭 리플렉션에 사용되는 용어에 대한 고정 조건 목록은 속성 비고를 IsGenericType 참조하세요.