MethodInfo.GetGenericMethodDefinition 메서드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 메서드를 생성하는 데 사용할 수 있는 제네릭 메서드 정의를 나타내는 MethodInfo 개체를 반환합니다.
public:
virtual System::Reflection::MethodInfo ^ GetGenericMethodDefinition();
public virtual System.Reflection.MethodInfo GetGenericMethodDefinition ();
[System.Runtime.InteropServices.ComVisible(true)]
public virtual System.Reflection.MethodInfo GetGenericMethodDefinition ();
abstract member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
override this.GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
[<System.Runtime.InteropServices.ComVisible(true)>]
abstract member GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
override this.GetGenericMethodDefinition : unit -> System.Reflection.MethodInfo
Public Overridable Function GetGenericMethodDefinition () As MethodInfo
반환
현재 메서드를 생성하는 데 사용할 수 있는 제네릭 메서드 정의를 나타내는 MethodInfo 개체입니다.
- 특성
예외
현재 메서드가 제네릭 메서드가 아닌 경우. 즉, IsGenericMethod이 false
를 반환합니다.
이 메서드는 지원되지 않습니다.
예제
다음 코드 예제에서는 제네릭 메서드가 있는 클래스와 메서드에 대한 를 MethodInfo 가져오고, 메서드를 형식 인수에 바인딩하고, 바인딩된 메서드에서 원래 제네릭 형식 정의를 다시 가져오는 데 필요한 코드를 보여줍니다.
이 예제는 메서드에 제공된 더 큰 예제의 MakeGenericMethod 일부입니다.
// Define a class with a generic method.
ref class Example
{
public:
generic<typename T> static void Generic(T toDisplay)
{
Console::WriteLine("\r\nHere it is: {0}", toDisplay);
}
};
// 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);
}
}
' 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
// Create a Type object representing class Example, and
// get a MethodInfo representing the generic method.
//
Type^ ex = Example::typeid;
MethodInfo^ mi = ex->GetMethod("Generic");
DisplayGenericMethodInfo(mi);
// Assign the int type to the type parameter of the Example
// method.
//
MethodInfo^ miConstructed = mi->MakeGenericMethod(int::typeid);
DisplayGenericMethodInfo(miConstructed);
// 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);
' 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)
// 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);
// 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);
' 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)
설명
제네릭 메서드 정의는 메서드를 생성할 수 있는 템플릿입니다. 예를 들어 제네릭 메서드 정의 T M<T>(T t)
(C# 구문으로 표현됨, Function M(Of T)(ByVal tVal As T) As T
Visual Basic에서는 )에서 메서드 int M<int>(int t)
(Function M(Of Integer)(ByVal tVal As Integer) As Integer
Visual Basic의 경우)를 생성하고 호출할 수 있습니다. 이 생성된 메서드를 MethodInfo 나타내는 개체를 지정하면 메서드는 GetGenericMethodDefinition 제네릭 메서드 정의를 반환합니다.
동일한 제네릭 메서드 정의에서 생성된 두 메서드가 만들어지면 메서드는 GetGenericMethodDefinition 두 메서드 모두에 대해 동일한 MethodInfo 개체를 반환합니다.
이미 제네릭 메서드 정의를 나타내는 에서 MethodInfo 를 호출 GetGenericMethodDefinition 하면 현재 MethodInfo가 반환됩니다.
제네릭 메서드 정의에 선언 형식의 제네릭 매개 변수가 포함된 경우 생성된 각 형식과 관련된 제네릭 메서드 정의가 있습니다. 예를 들어 다음 C#, Visual Basic 및 C++ 코드를 고려합니다.
class B<U,V> {}
class C<T> { public B<T,S> M<S>() {...}}
Class B(Of U, V)
End Class
Class C(Of T)
Public Function M(Of S)() As B(Of T, S)
...
End Function
End Class
generic <typename U, typename V> ref class B {};
generic <typename T> ref class C
{
public:
generic <typename S> B<T,S>^ M() {...};
};
생성된 형식 C<int>
(C(Of Integer)
Visual Basic의 경우)에서 제네릭 메서드 M
는 를 반환합니다 B<int, S>
. 열린 형식 C<T>
에서 은 를 M
반환합니다 B<T, S>
. 두 경우 모두 속성은 IsGenericMethodDefinition 를 나타내는 M
에 대해 MethodInfo 를 반환 true
하므로 MakeGenericMethod 두 개체에서 모두 MethodInfo 호출할 수 있습니다. 생성된 형식의 경우 호출 MakeGenericMethod 결과는 호출할 수 있는 입니다 MethodInfo . 열린 형식의 경우 에서 반환 MakeGenericMethod 된 을 MethodInfo 호출할 수 없습니다.
제네릭 메서드와 관련된 용어에 대한 고정 조건 목록은 속성을 참조 IsGenericMethod 하세요. 제네릭 리플렉션에 사용되는 다른 용어에 대한 고정 조건 목록은 속성을 참조 IsGenericType 하세요.
적용 대상
추가 정보
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기