예제 #1
0
        public static void AddProperty(this TypeDef typeDef, string propertyName, TypeSig propertyType)
        {
            var fieldName    = $"__{propertyName}_backingField";
            var backingField = new FieldDefUser(fieldName, new FieldSig(propertyType), FieldAttributes.Private);

            typeDef.Fields.Add(backingField);

            var getterName = $"get_{propertyName}";
            var setterName = $"set_{propertyName}";

            const MethodAttributes attributes = MethodAttributes.Public | MethodAttributes.HideBySig |
                                                MethodAttributes.SpecialName | MethodAttributes.NewSlot |
                                                MethodAttributes.Virtual;

            var module = typeDef.Module;

            // Implement the getter and the setter
            var getter = AddPropertyGetter(propertyType, getterName, attributes, backingField);
            var setter = AddPropertySetter(propertyType, setterName, attributes, backingField, module);

            typeDef.AddProperty(propertyName, propertyType, getter, setter);
        }