Telerik.Web.Mvc.Infrastructure.Implementation.AuthorizeAttributeBuilder.WriteProperty C# (CSharp) Method

WriteProperty() private static method

private static WriteProperty ( Type parentType, TypeBuilder builder, string name, Type type ) : void
parentType System.Type
builder System.Reflection.Emit.TypeBuilder
name string
type System.Type
return void
        private static void WriteProperty(Type parentType, TypeBuilder builder, string name, Type type)
        {
            const BindingFlags BindingFlag = BindingFlags.Public | BindingFlags.Instance;
            const MethodAttributes MethodAttribute = MethodAttributes.Public | MethodAttributes.Virtual;

            string getName = "get_" + name;
            string setName = "set_" + name;

            MethodInfo parentGetMethod = parentType.GetMethod(getName, BindingFlag);
            MethodBuilder implementedGetMethod = builder.DefineMethod(getName, MethodAttribute, type, Type.EmptyTypes);
            ILGenerator getIl = implementedGetMethod.GetILGenerator();
            getIl.Emit(OpCodes.Ldarg_0);
            getIl.Emit(OpCodes.Call, parentGetMethod);
            getIl.Emit(OpCodes.Ret);

            MethodInfo interfaceGetMethod = authorizeAttributeType.GetMethod(getName, BindingFlag);
            builder.DefineMethodOverride(implementedGetMethod, interfaceGetMethod);

            MethodInfo parentSetMethod = parentType.GetMethod(setName, BindingFlag);
            MethodBuilder implementedSetMethod = builder.DefineMethod(setName, MethodAttribute, typeof(void), new[] { type });
            ILGenerator setIl = implementedSetMethod.GetILGenerator();
            setIl.Emit(OpCodes.Ldarg_0);
            setIl.Emit(OpCodes.Ldarg_1);
            setIl.Emit(OpCodes.Call, parentSetMethod);
            setIl.Emit(OpCodes.Ret);

            MethodInfo interfaceSetMethod = authorizeAttributeType.GetMethod(setName, BindingFlag);
            builder.DefineMethodOverride(implementedSetMethod, interfaceSetMethod);
        }