除非您正在使用ExpandoObject的实例,否则无法执行此操作。 CLR类型的元数据在程序集中是固定的,无法在执行时更改。如果您确实需要这种动态行为,必须使用支持此行为的动态类型(如EpandoObject)。
只是为了补充Andrew Hare的回答:使用C# 4和.NET 4,您可以从DynamicObject继承并重新定义对类型实例执行各种操作的含义。DynamicObject定义了许多虚拟方法,您可以重写这些方法以控制例如访问属性的含义。您可以使用此功能允许向实例添加/删除属性,这与ExpandoObject几乎相同。有关ExpandoObject的更多信息,请参见此问题和此博客文章。
对于 UI 开发(即呈现给最终用户的内容),请考虑实现 ICustomTypeDescriptor(位于 System.ComponentModel 中)。许多控件都知道此接口,并将使用它来查询实例或类型公开的属性。