我有一個Reflection.Emit的問題。我想要動態創建類,它具有簡單的ICollection實現。我定義了精細的所有方法,而不是未來兩,:公衆的IEnumerator的GetEnumerator()&的IEnumerator IEnumerable.GetEnumerator() 接下來的代碼顯示了什麼,我想在我的動態類:動態生成的類實現IEnumerator <T> GetEnumerator()和IEnumerator IEnumerable.GetEnumerator()
public class SomeClassThatIsIEnumerable<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{...}
IEnumerator IEnumerable.GetEnumerator()
{...}
}
這一個是輸出從反射器打開了我的動態組裝:
public class SomeClassThatIsIEnumerable<T> : IEnumerable<T>
{
public IEnumerator<T> GetEnumerator()
{
...
}
IEnumerator GetEnumerator()
{
...
}
}
我定義我的課以這樣的方式:
TypeBuilder myType = module.DefineType("myType"...);
myType.AddInterfaceImplementation(typeof(IEnumerable));
myType.AddInterfaceImplementation(typeof(IEnumerable<T>));
myType.AddInterfaceImplementation(typeof(ICollection<T>));
myType.DefineMethodOverride(myDefineGetEnumerator(...),typeof(IEnumerable).GetMethod("GetEnumerator");
myType.DefineMethodOverride(myDefineGetGenericEnumerator(...),typeof(IEnumerable<T>).GetMethod("GetEnumerator);
//Definitions of other ICollection methods
//Define GetEnumerator is looks like this:
MethodBuilder method = myType.DefineMethod("GetEnumerator", MethodAttributes.Final | MethodAttributes.Virtual...)
ILGenerator il = method.GetILGenerator();
// adding opcodes
WH我調用myType.CreateType TypeLoadException拋出消息GetEnumerator方法沒有實現。我在IEnumerable.GetEnumerator方法的問題上提出建議,因爲我在編寫C#時遇到了問題,即使在IL中也是如此:)。誰能幫我?
什麼是你想要枚舉器*做*?最終,如果你搞亂'ILGenerator',你想得到非常熟悉的反射器和ildasm,看看它產生了什麼,並理解爲什麼。這是一個很難給出簡單答案的大問題/區域... – 2010-11-12 08:35:53
我不知道如何生成動態程序集,否則ILGenerator。如果你能在此得到一個提示,我會非常感激你 – zabulus 2010-11-12 08:59:49