2010-09-28 123 views
4

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

谢谢!

回答

9

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

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

the horse's mouth,扩展性质是在C#未来版本的可能性。

如果您需要访问私人字段或方法,这不会对您有所帮助。在这种情况下,你可能会考虑反思,但我建议不要这样做,除非它真的有必要 - 有时候它可能会变得混乱。

+0

严格地说,C#3.0(不是.NET 3.0),因为如果你只是定义属性,你可以使用扩展方法来对*任何*版本的.NET。 – 2010-09-28 07:36:24

+0

@Marc:d'oh!编辑,谢谢。 – 2010-09-28 07:50:25

1

如果属性的目的是为了数据绑定,那么您可以在控制使用TypeDescriptionProvider,这是一个ICustomTypeDescriptor工厂外面添加运行属性类型。然后,您会链接原始提供商并创建一个自定义PropertyDescriptor,获取附加数据。

这对于基于现有属性(以及“相当容易”我的意思是“仅略微疯狂”)计算的只读额外属性是相当容易的,但对于读写属性(或属性是独立于现有成员)这是非常困难的,因为你需要弄清楚在哪里把这些值(仍然得到垃圾收集等)。不平凡的。