2010-05-08 88 views
0

通常一個的ILGenerator動態生成的方法,當我想打電話給在被編寫方法上同類型的其他的ILGenerator對象動態方法我做了以下內容:呼籲在同類型

generator.Emit(OpCodes.Ldarg_0); // reference to the current object 
generator.Emit(OpCodes.Ldstr, "someArgument"); 
generator.Emit(OpCodes.Call, methodBuilder); //this methodbuilder is also defined on this dynamic type. 

但是,我遇到了以下問題:我無法引用要調用的方法的方法構建器,因爲它是由另一個框架生成的(我只獲取對當前TypeBuilder的引用)。該方法被定義爲受保護的虛擬(和重寫在methodbuilder我不能得到一個參考)在基類當前的動態型的,我可以通過執行此獲得對它的引用:

generator.Emit(OpCodes.Ldarg_0); // reference to the current object 
generator.Emit(OpCodes.Ldstr, "someArgument"); 
generator.Emit(OpCodes.Call, baseType.GetMethod("SomeMethodDefinedInBaseClassThatWasOverridenInThisDynamicType")); 

問題這是調用基類型的方法而不是重寫方法。

有沒有什麼辦法可以得到一個方法構建器的引用,只引用定義它的類型構建器?或者有沒有辦法使用ILGenerator調用方法,而不必將「MethodInfo」對象傳遞給它?

回答

0

不知道我關注,但您需要使用Opcodes.CallVirt來調用虛擬方法。其中應該自動調用重寫的方法。

+0

工作,謝謝。 – 2010-05-08 18:32:25