public EmittedMethod AddGetter() { if (_getter != null) throw new InvalidOperationException("Getter already assigned"); _getter = this.TargetClass.DefineMethod(String.Format("get_{0}", this.Name)); if (IsStatic) _getter.IncludeAttributes(MethodAttributes.Static); _getter.IncludeAttributes(MethodAttributes.Public | MethodAttributes.Virtual | MethodAttributes.HideBySig | MethodAttributes.SpecialName | MethodAttributes.Final | MethodAttributes.NewSlot); _getter.ReturnType = this.PropertyType; return _getter; }
protected internal override void OnCompile() { this.Builder = this.TargetClass.Builder.DefineProperty(this.Name , this.Attributes , this.PropertyType.Target , this.ParameterTypes); if (_getter == null && _boundField != null) { _getter = AddGetter(); _getter.DefineMethodBody((m,il) => { il.LoadArg_0(); _boundField.LoadValue(il); }); } if (_getter != null) { if (!_getter.IsCompiled) _getter.Compile(); Builder.SetGetMethod(_getter.Builder); } if (_setter == null && _boundField != null) { _setter = AddSetter(); _setter.DefineMethodBody((m, il) => { il.LoadArg_0(); il.LoadArg_1(); _boundField.StoreValue(il); }); } if (_setter != null) { if (!_setter.IsCompiled) _setter.Compile(); Builder.SetSetMethod(_setter.Builder); } }