Chinchilla.Serializers.DefaultMessageTypeFactory.CreateProperty C# (CSharp) Метод

CreateProperty() приватный Метод

private CreateProperty ( TypeBuilder typeBuilder, PropertyInfo interfaceProperty ) : void
typeBuilder System.Reflection.Emit.TypeBuilder
interfaceProperty System.Reflection.PropertyInfo
Результат void
        private void CreateProperty(TypeBuilder typeBuilder, PropertyInfo interfaceProperty)
        {
            var propertyName = interfaceProperty.Name;

            var field = typeBuilder.DefineField(
                propertyName,
                interfaceProperty.PropertyType,
                FieldAttributes.Private);

            var property = typeBuilder.DefineProperty(
                propertyName,
                PropertyAttributes.None,
                interfaceProperty.PropertyType,
                new[] { interfaceProperty.PropertyType });

            var getMethodBuilder = typeBuilder.DefineMethod(
                "get_value",
                DuckMethodAttributes,
                interfaceProperty.PropertyType,
                Type.EmptyTypes);

            var getGenerator = getMethodBuilder.GetILGenerator();
            getGenerator.Emit(OpCodes.Ldarg_0);
            getGenerator.Emit(OpCodes.Ldfld, field);
            getGenerator.Emit(OpCodes.Ret);

            var setMethodBuilder = typeBuilder.DefineMethod(
                "set_value",
                DuckMethodAttributes,
                null,
                new[] { interfaceProperty.PropertyType });

            var setGenerator = setMethodBuilder.GetILGenerator();
            setGenerator.Emit(OpCodes.Ldarg_0);
            setGenerator.Emit(OpCodes.Ldarg_1);
            setGenerator.Emit(OpCodes.Stfld, field);
            setGenerator.Emit(OpCodes.Ret);

            property.SetGetMethod(getMethodBuilder);
            property.SetSetMethod(setMethodBuilder);

            typeBuilder.DefineMethodOverride(getMethodBuilder, interfaceProperty.GetGetMethod());
            typeBuilder.DefineMethodOverride(setMethodBuilder, interfaceProperty.GetSetMethod());
        }
    }