当前位置:  开发笔记 > 编程语言 > 正文

可以在C#中动态添加属性吗?

如何解决《可以在C#中动态添加属性吗?》经验,为你挑选了4个好方法。

是否可以在运行时添加属性或在运行时更改属性的值?



1> Alex Lyman..:

这实际上取决于你想要完成的目标.

该System.ComponentModel.TypeDescriptor东西可以用来添加属性类型,属性和对象实例,它有,你必须用它来读取这些属性以及限制.如果您正在编写消耗这些属性的代码,并且您可以在这些限制内生存,那么我肯定会建议它.

据我所知,PropertyGrid控件和visual studio设计界面是BCL中唯一使用TypeDescriptor的东西.事实上,这就是他们如何处理他们真正需要做的事情的一半.


实际上,大多数数据绑定使用`TypeDescriptor` - 而不仅仅是'PropertyGrid`.

2> Mark Cidade..:

属性是静态元数据.程序集,模块,类型,成员,参数和返回值不是C#中的第一类对象(例如,System.Type类只是类型的反映表示).您可以获取类型的属性实例,如果属性可写,则更改属性,但在应用于类型时不会影响属性.



3> petr k...:

你不能.一种解决方法可能是在运行时生成派生类并添加属性,尽管这可能有点过分.



4> torial..:

好吧,为了与众不同,我发现了一篇引用Ref.Emit的文章.

这是链接:http://www.codeproject.com/KB/cs/dotnetattributes.aspx,您还需要查看本文底部的一些注释,因为讨论了可能的方法.


请注意,您可以使用Reflection.Emit类在运行时创建属性,但是您可以将它们绑定到使用Emit包构建的类,而不是现有的类.
推荐阅读
夏晶阳--艺术
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有