MethodBase.GetCurrentMethod 方法(System.Reflection)

文章推薦指數: 80 %
投票人數:10人

C# 複製. public static System.Reflection.MethodBase? GetCurrentMethod (); ... Name); _value = value; } public int Value { get { MethodBase m = MethodBase. 跳到主要內容 已不再支援此瀏覽器。

請升級至MicrosoftEdge,以利用最新功能、安全性更新和技術支援。

下載MicrosoftEdge 其他資訊 目錄 結束焦點模式 語言 閱讀英文 儲存 編輯 共用 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 語言 語言 閱讀英文 儲存 目錄 閱讀英文 儲存 編輯 Twitter LinkedIn Facebook 電子郵件 WeChat 目錄 MethodBase.GetCurrentMethod方法 參考 此頁面有所助益嗎? Yes No 還有其他意見反應嗎? 系統會將意見反應傳送給Microsoft:按下[提交]按鈕,您的意見反應將用來改善Microsoft產品和服務。

隱私權原則。

送出 謝謝。

定義 命名空間: System.Reflection 組件:System.Runtime.dll 組件:mscorlib.dll 組件:netstandard.dll 重要 部分資訊涉及發行前產品,在發行之前可能會有大幅修改。

Microsoft對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。

本文內容 傳回代表目前執行方法的MethodBase物件。

public: staticSystem::Reflection::MethodBase^GetCurrentMethod(); publicstaticSystem.Reflection.MethodBase?GetCurrentMethod(); publicstaticSystem.Reflection.MethodBaseGetCurrentMethod(); staticmemberGetCurrentMethod:unit->System.Reflection.MethodBase PublicSharedFunctionGetCurrentMethod()AsMethodBase 傳回 MethodBase GetCurrentMethod()是從執行方法中呼叫的靜態方法,並傳回關於該執行方法的資訊。

代表目前執行方法的MethodBase物件。

例外狀況 TargetException 這個成員曾被晚期繫結機制叫用過。

範例 下列範例會定義兩種類型。

第一個是非泛型類別,TestClass包含一個函式、一個名為的方法GetValue,以及一個名為的讀寫屬性GetValue。

第二個是名為的泛型類別,TestClass其中包含一個函式、GetValue方法和泛型方法ConvertValue

每個函式、方法和屬性存取子都包含方法的呼叫GetCurrentMethod。

usingSystem; usingSystem.Reflection; publicclassExample { publicstaticvoidMain() { vart=newTestClass(); Console.WriteLine(t.GetValue()); t.Value=10; Console.WriteLine(t.Value); Console.WriteLine(); vartg=newTest(200); Console.WriteLine(tg.GetValue()); varb=tg.ConvertValue(); Console.WriteLine("{0}->{1}({2})",tg.GetValue().GetType().Name, b,b.GetType().Name); } } publicclassTestClass { privateNullable_value; publicTestClass() { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); } publicTestClass(intvalue) { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); _value=value; } publicintValue { get{ MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); return_value.GetValueOrDefault(); } set{ MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); _value=value; } } publicintGetValue() { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); returnthis.Value; } } publicclassTest { privateTvalue; publicTest(Tvalue) { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); this.value=value; } publicTGetValue() { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); returnvalue; } publicYConvertValue() { MethodBasem=MethodBase.GetCurrentMethod(); Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name); Console.Write("Genericmethod:{0},definition:{1},Args:", m.IsGenericMethod,m.IsGenericMethodDefinition); if(m.IsGenericMethod){ foreach(vararginm.GetGenericArguments()) Console.Write("{0}",arg.Name); } Console.WriteLine(); try{ return(Y)Convert.ChangeType(value,typeof(Y)); } catch(OverflowException){ throw; } catch(InvalidCastException){ throw; } } } //Theexampledisplaysthefollowingoutput: //ExecutingTestClass..ctor //ExecutingTestClass.GetValue //ExecutingTestClass.get_Value //0 //ExecutingTestClass.set_Value //ExecutingTestClass.get_Value //10 // //ExecutingTest`1..ctor //ExecutingTest`1.GetValue //200 //ExecutingTest`1.ConvertValue //Genericmethod:True,definition:True,Args:Y //ExecutingTest`1.GetValue //Int32->200(Byte) ImportsSystem.Reflection ModuleExample PublicSubMain() DimtAsNewTestClass() Console.WriteLine(t.GetValue()) t.Value=10 Console.WriteLine(t.Value) Console.WriteLine() DimtgAsNewTest(OfInteger)(200) Console.WriteLine(tg.GetValue()) Dimb=tg.ConvertValue(OfByte)() Console.WriteLine("{0}->{1}({2})",tg.GetValue().GetType().Name, b,b.GetType().Name) EndSub EndModule PublicClassTestClass Private_valueAsNullable(OfInteger) PublicSubNew() DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) EndSub PublicSubNew(valueAsInteger) DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) _value=value EndSub PublicPropertyValueAsInteger Get DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) Return_value.GetValueOrDefault() EndGet Set DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) _value=value EndSet EndProperty PublicFunctionGetValue()AsInteger DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) ReturnMe.Value EndFunction EndClass PublicClassTest(OfT) PrivatevalueAsT PublicSubNew(valueAsT) DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) Me.value=value EndSub PublicFunctionGetValue()AsT DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) Returnvalue EndFunction PublicFunctionConvertValue(OfY)()AsY DimmAsMethodBase=MethodBase.GetCurrentMethod() Console.WriteLine("Executing{0}.{1}", m.ReflectedType.Name,m.Name) Console.Write("Genericmethod:{0},definition:{1},Args:", m.IsGenericMethod,m.IsGenericMethodDefinition) Ifm.IsGenericMethodThen ForEachargInm.GetGenericArguments() Console.Write("{0}",arg.Name) Next EndIf Console.WriteLine() Try ReturnCType(Convert.ChangeType(value,GetType(Y)),Y) CatcheAsOverflowException Throw CatcheAsInvalidCastException Throw EndTry EndFunction EndClass 'Theexampledisplaysthefollowingoutput: 'ExecutingTestClass..ctor 'ExecutingTestClass.GetValue 'ExecutingTestClass.get_Value '0 'ExecutingTestClass.set_Value 'ExecutingTestClass.get_Value '10 ' 'ExecutingTest`1..ctor 'ExecutingTest`1.GetValue '200 'ExecutingTest`1.ConvertValue 'Genericmethod:True,definition:True,Args:Y 'ExecutingTest`1.GetValue 'Int32->200(Byte) 備註 如果目前執行的方法是在泛型型別上定義的,則會MethodInfoGetCurrentMethod從泛型型別定義取得所傳回的,(也就是傳回MethodBase.ContainsGenericParameterstrue)。

因此,它不會反映在呼叫方法時所使用的型別引數。

例如,如果在M()VisualBasic)中(泛型型別定義C方法C(OfT),並GetCurrentMethod從呼叫,則會傳回C.M()GetCurrentMethodC.M()C(OfT).M()VisualBasic)中的(。

如果目前執行的方法是泛型方法,則會傳回GetCurrentMethod泛型方法定義。

如果泛型方法是在泛型型別上定義的,則MethodInfo會從泛型型別定義中取得。

適用於 本文內容



請為這篇文章評分?