将属性添加到现有类
我有一个私有类,我用它来实现某些属性。 因此,我没有能力修改实际的私有类,也不想使用inheritance来创建我自己的类来代替它。 有没有办法可以向该私有类添加属性?
谢谢!
如果您可以访问所需类中的数据,并且可以使用方法而不是属性,请查看C#3.0中介绍的扩展方法 。 从那篇文章中,这是一个添加到(密封的,不可修改的)String类的扩展方法:
public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } }
从马的口中 ,扩展属性是未来版本的C#的可能性。
如果您需要访问私有字段或方法,这对您没有帮助。 在这种情况下,你可能会考虑反思,但我建议远离它,除非它真的有必要 – 它有时会变得混乱。
如果属性的用途是用于数据绑定,则可以使用TypeDescriptionProvider
将运行时属性添加到控件外部的类型, TypeDescriptionProvider
是ICustomTypeDescriptor
的工厂。 然后,您将链接原始提供程序并创建一个获取其他数据的自定义PropertyDescriptor
。
对于基于现有属性计算的只读额外属性(以及“相当容易”,我的意思是“仅略微疯狂”),这相当容易,但对于读写属性(或独立于现有成员的属性)这是非常困难的,因为你需要找出放置这些值的位置 (仍以垃圾收集的方式等)。 不平凡的。
- 如何从会话对象将ListBox绑定到DataTable?
- 构建JSON配置节
- 如果Entity Framework / DbContext是DAL / Repository,它在哪里适合3层架构?
- 在WPF应用程序中获取不活动/空闲时间
- 如何moqentity frameworkSaveChangesAsync?
- PayPal API混淆 – ExpressCheckout使用哪一个
- C#库根据您自己的数据库,facebook,twitter,OpenIDvalidation用户,
- 数据绑定WPF ComboBox与XAML中定义的选项?
- WCF 4.0 – 使用REST服务模板返回JSON WebFaultException