麻煩歸麻煩,非不能也,動態生成乙個簡單的類還不至於太難。
假設有如下介面:
inte***ce ianimal
希望能建立乙個類生成器typecreator,並能以以下方式使用:
typecreator tc=new typecreator(typeof(ianimal));
type t = tc.build();
ianimal myanimal= (ianimal)activator.createinstance(t);
myanimal.move();
myanimal.eat();
using system;
using system.reflection;
using system.reflection.emit;
public class typecreator
public type build() ;
} else
//得到型別生成器
typebuilder typebuilder = modbuilder.definetype(newtypename,newtypeattribute,newtypeparent,newtypeinte***ces);
//以下將為新型別宣告方法:新型別應該override基型別的所以virtual方法
//得到基型別的所有方法
methodinfo targetmethods = targettype.getmethods();
//遍歷各個方法,對於virtual的方法,獲取其簽名,作為新型別的方法
foreach(methodinfo targetmethod in targetmethods)
ilgen.emit(opcodes.ldstr,"i'm "+ targetmethod.name +"ing");
ilgen.emit(opcodes.call,typeof(console).getmethod("writeline",new type));
ilgen.emit(opcodes.ret); }
} //真正建立,並返回
return(typebuilder.createtype()); }
} 好了,測試一下試試看:using system;
public class tester
}
通過Emit實現動態類生成
麻煩歸麻煩,非不能也,動態生成乙個簡單的類還不至於太難。假設有如下介面 inte ce ianimal 希望能建立乙個類生成器typecreator,並能以以下方式使用 typecreator tc new typecreator typeof ianimal type t tc.build ian...
動態生成CS檔案(動態生成C 類)
1.codetypedeclaration 可用於表示宣告類 結構 介面或列舉的 官方傳送門 2.codememberfield 表示某種型別的字段的宣告 官方傳送門 3.codedomprovider 可用於建立和檢索 生成器和 編譯器的例項。生成器可用於以特定的語言生成 而 編譯器可用於將 編譯...
vue通過 emit傳值的方式實現簡單的搜尋功能
1 首先先專案中建立乙個檔案,該檔案隨便起名sousuo.vue html sousuo t sousuo keyup.enter searchcont el icon search i t sousuo xiao text placeholder 請輸入內容 ref input v model s...