Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>Here's an example of creating a class at runtime that contains a single integer property <code>Id</code> which is virtual:</p> <pre><code>class Program { static void Main(string[] args) { var aName = new AssemblyName("DynamicAssemblyExample"); var ab = AppDomain.CurrentDomain.DefineDynamicAssembly(aName, AssemblyBuilderAccess.Run); var mb = ab.DefineDynamicModule(aName.Name); var tb = mb.DefineType("MyDynamicType", TypeAttributes.Public); var fbId = tb.DefineField("_id", typeof(int), FieldAttributes.Private); var pbId = tb.DefineProperty("Id", PropertyAttributes.HasDefault, typeof(int), null); var getSetAttr = MethodAttributes.Public | MethodAttributes.SpecialName | MethodAttributes.HideBySig | MethodAttributes.Virtual; var mbIdGetAccessor = tb.DefineMethod("get_Id", getSetAttr, typeof(int), Type.EmptyTypes); var numberGetIL = mbIdGetAccessor.GetILGenerator(); numberGetIL.Emit(OpCodes.Ldarg_0); numberGetIL.Emit(OpCodes.Ldfld, fbId); numberGetIL.Emit(OpCodes.Ret); var mbIdSetAccessor = tb.DefineMethod("set_Id", getSetAttr, null, new Type[] { typeof(int) }); var numberSetIL = mbIdSetAccessor.GetILGenerator(); numberSetIL.Emit(OpCodes.Ldarg_0); numberSetIL.Emit(OpCodes.Ldarg_1); numberSetIL.Emit(OpCodes.Stfld, fbId); numberSetIL.Emit(OpCodes.Ret); pbId.SetGetMethod(mbIdGetAccessor); pbId.SetSetMethod(mbIdSetAccessor); var t = tb.CreateType(); var instance = Activator.CreateInstance(t); Console.WriteLine(t.GetProperty("Id").GetGetMethod().IsVirtual); } } </code></pre> <p>The reason you don't find anything related to <code>virtual</code> in the <code>PropertyBuilder</code> is because properties don't have this concept. Methods can be virtual, so when you declare a <em>virtual property</em> you are declaring virtual getter and setter methods. Take a look at <a href="http://msdn.microsoft.com/en-us/library/system.reflection.methodattributes.aspx" rel="nofollow noreferrer">MethodAttributes</a> enumeration.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. VO
      singulars
      1. This table or related slice is empty.
    2. VO
      singulars
      1. This table or related slice is empty.
    3. VO
      singulars
      1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload