向现有类添加属性

4

我有一个私有类,用于实现某些属性。因此,我无法修改实际的私有类,并且不想使用继承来创建自己的类代替它。有没有办法可以向该私有类添加属性?

谢谢!

2个回答

9

如果您可以访问所需类中的数据,并且可以使用方法而不是属性,请查看在C# 3.0中引入的扩展方法。从该文章中,以下是添加到(封闭的,不可修改的)String类的扩展方法:

public static class MyExtensions
{
   public static int WordCount(this String str)
   {
       return str.Split(new char[] { ' ', '.', '?' }, 
                        StringSplitOptions.RemoveEmptyEntries).Length;
   }
}   

据权威消息人士Eric Lippert透露,C#的未来版本可能会支持扩展属性。

然而,如果您需要访问私有字段或方法,则无济于事。在这种情况下,您可以考虑使用反射,但我建议除非确实必要,否则不要使用它 - 它有时会变得混乱。


严格来说,是C# 3.0(而不是.NET 3.0),因为你可以针对任何版本的.NET使用扩展方法,只需定义属性即可。 - Marc Gravell

1
如果属性的目的是用于数据绑定,那么您可以使用TypeDescriptionProvider将运行时属性添加到类型之外的工厂ICustomTypeDescriptor。然后,您需要链接原始提供程序并创建一个自定义PropertyDescriptor来获取附加数据。
对于基于现有属性计算的只读额外属性,这相当容易(“相当容易”意味着“稍微有点疯狂”),但对于读写属性(或独立于现有成员的属性)非常困难,因为您需要弄清楚在哪里放置这些值(以一种仍然能够垃圾回收等方式)。不是简单的事情。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接