close
在把物件轉為 json 時想到的一個問題,如果可以依據特定條件把類別的某些 property 或 field 刪掉,這樣產生 json 字串時就不會包含一些無用的屬性,於是就順手研究如何動態的產生類別。
要動態產生類別,會需要下列幾個物件:
- AssemblyBuilder
- ModuleBuilder
- TypeBuilder
- FieldBuilder
有趣的是,上述幾個類別,使用時是有相依性的,請看以下程式碼:
AssemblyName assemblyName = new AssemblyName(); assemblyName.Name = "TestAssembly"; AssemblyBuilder assemblyBuilder = AssemblyBuilder.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.RunAndSave); ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(assemblyName.Name, assemblyName.Name + ".dll"); TypeBuilder typeBuilder = moduleBuilder.DefineType("myNamespace.myType", TypeAttributes.Public); FieldBuilder myField1 = typeBuilder.DefineField("myField1", typeof(string), FieldAttributes.Public); FieldBuilder myField2 = typeBuilder.DefineField("myField2", typeof(string), FieldAttributes.Public); Type myType = typeBuilder.CreateType(); Console.WriteLine("Type: {0}", myType.Name); Console.WriteLine("Namespace:{0}", myType.Namespace); Console.WriteLine("Fields:"); foreach (FieldInfo field in myType.GetFields()) { Console.WriteLine(field.Name); }
產生出來的類別,最後還能存成 dll 檔案,供其它程式使用。透過 reflection ,或許能讓物件的使用上更具彈性,只是這樣的使用方式,在效能上可能會造成更大的耗損。
全站熱搜