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



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

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");
    }

主要:

static void Main(string[] args)
{
    MethodInfo function = CreateFunction("x + 2 * y");
    object result = function.Invoke(null, new object[] { 2, 3 });
    Console.WriteLine(result);
}

主要问题是如何在运行时创建属性并在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));
}

相关内容

  • 没有找到相关文章

最新更新