在运行时改变属性名称(Change a property name at runtime)

2019-11-02 04:41发布

我可以改变一类的领域在运行时在C#中?

例如,如果我有类:

public class ExampleClass{
    public string Name;
}

我可以改变它在运行时,使用反射或其他技术,改变了名称,以名称1?

public class ExampleClass{
    public string Name1;
}

Answer 1:

不,你不能在运行时改变类型的实际成员

选项:

  • 动态创建一个新的类型,看起来很像ExampleClass ,却有着不同的成员-他们之间可能一些映射代码
  • 如果目的是为某种运行时绑定的,可以考虑ICustomTypeDescriptorIDynamicMetaObjectProvider -这将使得一些框架来对待它,仿佛它有一个Name1 ,即使它实际上没有(注:类似的事情DynamicObjectExpandoObject包括实现IDynamicMetaObjectProvider ,但可以用其他方式做到这一点)
  • 使用一个索引,即,使得var val = obj["Name1"]; 返回有意义的事


Answer 2:

看一看DynamicObject:

http://msdn.microsoft.com/en-us/library/system.dynamic.dynamicobject.aspx



文章来源: Change a property name at runtime