<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      導航

      動態創建類并添加屬性賦值

      碰巧項目使用動態創建類這個稀奇的需求,就研究一下。

      有點缺陷就是對屬性賦值問題。

      public static class MyTypeBuilder
          {
              public static void CreateNewObject()
              {
                  var fields = new List<Field>() {
                      new Field("EmployeeID", typeof(int)),
                      new Field("EmployeeName", typeof(string)),
                      new Field("Designation", typeof(string)),
                      new Field("Age", typeof(int))  };
                  var myType = CompileResultType("MyDynamicType", fields);
                  var myObject = Activator.CreateInstance(myType);

                 PropertyInfo[] fieldss = myObject.GetType().GetProperties();//獲取指定對象的所有公共屬性
                              foreach (PropertyInfo pro in fieldss)
                              {
                                  foreach (var fie in fields)
                                  {
                                      if (fie.FieldName == pro.Name)
                                      {
                                          pro.SetValue(myObject, fie.FieldValue, null);//給對象賦值
                                      }
                                  }
                              }
              }
              public static Type CompileResultType(string typeSignature, List<Field> fields)
              {
                  TypeBuilder tb = GetTypeBuilder(typeSignature);
                  ConstructorBuilder constructor = tb.DefineDefaultConstructor(MethodAttributes.Public |
                  MethodAttributes.SpecialName | MethodAttributes.RTSpecialName);

                  // NOTE: assuming your list contains Field objects with fields FieldName(string) and FieldType(Type)
                  foreach (var field in fields)
                      CreateProperty(tb, field.FieldName, field.FieldType);

                  Type objectType = tb.CreateType();
                  return objectType;
              }
             創建實體
              private static TypeBuilder GetTypeBuilder(string typeSignature)
              {
                  //var typeSignature = "MyDynamicType";
                  var an = new AssemblyName(typeSignature);
                  AssemblyBuilder assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(an, AssemblyBuilderAccess.Run);
                  ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule("MainModule");
                  TypeBuilder tb = moduleBuilder.DefineType(typeSignature,
                          TypeAttributes.Public |
                          TypeAttributes.Class |
                          TypeAttributes.AutoClass |
                          TypeAttributes.AnsiClass |
                          TypeAttributes.BeforeFieldInit |
                          TypeAttributes.AutoLayout,
                          null);
                  return tb;
              }
              實體添加屬性
              private static void CreateProperty(TypeBuilder tb, string propertyName, Type propertyType)
              {
                  FieldBuilder fieldBuilder = tb.DefineField("_" + propertyName, propertyType, FieldAttributes.Private);

                  PropertyBuilder propertyBuilder = tb.DefineProperty(propertyName, PropertyAttributes.HasDefault, propertyType, null);
                  MethodBuilder getPropMthdBldr = tb.DefineMethod("get_" + propertyName, MethodAttributes.Public |
                  MethodAttributes.SpecialName | MethodAttributes.HideBySig, propertyType, Type.EmptyTypes);
                  ILGenerator getIl = getPropMthdBldr.GetILGenerator();

                  getIl.Emit(OpCodes.Ldarg_0);
                  getIl.Emit(OpCodes.Ldfld, fieldBuilder);
                  getIl.Emit(OpCodes.Ret);

                  MethodBuilder setPropMthdBldr =
                      tb.DefineMethod("set_" + propertyName,
                        MethodAttributes.Public |
                        MethodAttributes.SpecialName |
                        MethodAttributes.HideBySig,
                        null, new[] { propertyType });

                  ILGenerator setIl = setPropMthdBldr.GetILGenerator();
                  Label modifyProperty = setIl.DefineLabel();
                  Label exitSet = setIl.DefineLabel();

                  setIl.MarkLabel(modifyProperty);
                  setIl.Emit(OpCodes.Ldarg_0);
                  setIl.Emit(OpCodes.Ldarg_1);
                  setIl.Emit(OpCodes.Stfld, fieldBuilder);

                  setIl.Emit(OpCodes.Nop);
                  setIl.MarkLabel(exitSet);
                  setIl.Emit(OpCodes.Ret);

                  propertyBuilder.SetGetMethod(getPropMthdBldr);
                  propertyBuilder.SetSetMethod(setPropMthdBldr);
              }
          }

          public class Field
          {
              public Field(string name, Type type)
              {
                  this.FieldName = name;
                  this.FieldType = type;
              }
              public Field(string name, Type type, string value)
              {
                  this.FieldName = name;
                  this.FieldType = type;
                  this.FieldValue = value;
              }
              public string FieldName;

              public Type FieldType;

              public string FieldValue;
          }

      posted on 2020-05-15 17:38  zrSoldier  閱讀(466)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 四虎影视一区二区精品| 国产精品无码a∨精品| 国产精品无遮挡猛进猛出| 无码人妻h动漫| 丰满无码人妻热妇无码区| 国产av黄色一区二区三区| 午夜久久一区二区狠狠干| 最近中文国语字幕在线播放| 精品人妻日韩中文字幕| 99久久99久久久精品久久| 亚洲综合一区二区国产精品| 国偷自产一区二区三区在线视频| 人妻少妇精品视频专区| 国产亚洲精品中文字幕| 一本色道久久88亚洲精品综合| 亚洲av影院一区二区三区| 九色国产精品一区二区久久| 国产美女白丝袜精品_a不卡| 在线中文一区字幕对白| 日韩区中文字幕在线观看| 久久久久国产精品人妻电影| 中文字幕久久国产精品| 成人免费无码大片a毛片| 一个人在看www免费| 4hu44四虎www在线影院麻豆| 欧美成年黄网站色视频| 中文字幕精品人妻av在线| 在线播放深夜精品三级| 国产亚洲精品福利在线无卡一| 伊人无码精品久久一区二区| 中文字幕亚洲制服在线看| 成人亚洲狠狠一二三四区| 亚洲乱码精品久久久久..| 欧美国产日韩在线三区| 中国亚州女人69内射少妇| 久久亚洲精精品中文字幕| 又大又紧又粉嫩18p少妇| 激情综合五月| 99精品国产综合久久久久五月天| 免费视频爱爱太爽了| 国产一精品一av一免费爽爽|