C# 在运行时创建属性并传递值

C# 在运行时创建属性并传递值,c#,reflection,csharpcodeprovider,C#,Reflection,Csharpcodeprovider,我找到了创建运行时函数的示例 public static MethodInfo CreateFunction(string function) { string code = @" using System; namespace UserFunctions { public class BinaryFunction {

我找到了创建运行时函数的示例

public static MethodInfo CreateFunction(string function)
    {
        string code = @"
        using System;

        namespace UserFunctions
        {                
            public class BinaryFunction
            {                
                public static double Function(double x, double y)
                {
                    return func_xy;
                }
            }
        }
            ";

        string finalCode = code.Replace("func_xy", function);

        CSharpCodeProvider provider = new CSharpCodeProvider();
        CompilerResults results = provider.CompileAssemblyFromSource(new CompilerParameters(), finalCode);

        Type binaryFunction = results.CompiledAssembly.GetType("UserFunctions.BinaryFunction");
        return binaryFunction.GetMethod("Function");
    }
主要内容:

主要问题是如何在运行时创建属性,并在
main
中将值传递给它

public static PropertyInfo CreateProperty()
    {
        string code=@"
        private string name;

        public string Name {
            get{
                return this.name;
            }
            set{
                this.name=value;
            }
        }
        ";
        CSharpCodeProvider provider = new CSharpCodeProvider();
        CompilerResults results = provider.CompileAssemblyFromSource(new CompilerParameters(),code);
    ///
    }
同样的方式

public static Type CreateProperty(string value)
{
    string code = @"
    namespace UserFunctions
    {                
            public class MyProperty
            {          
            private string name = my_value

            public string Name {
                get{
                    return this.name;
                }
                set{
                    this.name=value;
                }
            }
        }
    }
";
    code = code.Replace("my_value", '"' + value + '"');
    CSharpCodeProvider provider = new CSharpCodeProvider();
    CompilerResults results = provider.CompileAssemblyFromSource(new CompilerParameters(), code);
    Type myProperty = results.CompiledAssembly.GetType("UserFunctions.MyProperty");
    return myProperty;
}

static void Main()
{

    Type propertyType = CreateProperty("this is a value");
    var property = propertyType.GetProperty("Name");
    var instance = Activator.CreateInstance(propertyType);

    Console.WriteLine(property.GetValue(instance, null));

    property.SetValue(instance, "MyNewValue", null);            
    Console.WriteLine(property.GetValue(instance, null));
}
public static Type CreateProperty(string value)
{
    string code = @"
    namespace UserFunctions
    {                
            public class MyProperty
            {          
            private string name = my_value

            public string Name {
                get{
                    return this.name;
                }
                set{
                    this.name=value;
                }
            }
        }
    }
";
    code = code.Replace("my_value", '"' + value + '"');
    CSharpCodeProvider provider = new CSharpCodeProvider();
    CompilerResults results = provider.CompileAssemblyFromSource(new CompilerParameters(), code);
    Type myProperty = results.CompiledAssembly.GetType("UserFunctions.MyProperty");
    return myProperty;
}

static void Main()
{

    Type propertyType = CreateProperty("this is a value");
    var property = propertyType.GetProperty("Name");
    var instance = Activator.CreateInstance(propertyType);

    Console.WriteLine(property.GetValue(instance, null));

    property.SetValue(instance, "MyNewValue", null);            
    Console.WriteLine(property.GetValue(instance, null));
}