在运行时更改属性名称

本文关键字:属性 运行时 | 更新日期: 2023-09-27 18:18:37

我可以在c#运行时更改类的字段吗?

例如,如果我有一个类:
public class ExampleClass{
    public string Name;
}

我可以在运行时更改它,使用反射或其他技术,将Name更改为Name1吗?

public class ExampleClass{
    public string Name1;
}

在运行时更改属性名称

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

选项:

  • 动态创建一个新类型,它看起来很像ExampleClass,但有不同的成员-并且可能在它们之间有一些映射代码
  • 如果意图是某种类型的运行时绑定,考虑ICustomTypeDescriptorIDynamicMetaObjectProvider -这将允许一些框架对待它,虽然它有一个Name1,即使它实际上没有(注意:像DynamicObjectExpandoObject的东西包括IDynamicMetaObjectProvider的实现,但你可以做它在其他方式)
  • 使用索引器,即使var val = obj["Name1"];返回有意义的东西

看看DynamicObject:

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