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