我有一个私有类,我用它来实现某些属性。因此,我没有能力修改实际的私有类,也不想使用继承来创建我自己的类来代替它。有没有办法可以向该私有类添加属性?
谢谢!
答案 0 :(得分: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#版本的可能性。
如果您需要访问私有字段或方法,这对您没有帮助。在这种情况下,你可能会考虑反思,但我建议远离它,除非它确实是必要的 - 它有时会变得混乱。
答案 1 :(得分:1)
如果属性的用途是用于数据绑定,那么您可以使用TypeDescriptionProvider
向ICustomTypeDescriptor
添加运行时属性到控件之外的类型,PropertyDescriptor
}。然后,您可以链接原始提供程序并创建获取其他数据的自定义{{1}}。
对于基于现有属性计算的只读额外属性(以及“相当容易”,我的意思是“仅略微疯狂”),这相当容易,但对于读写属性(或者是与现有成员无关的属性),这非常困难,因为你需要找出放置这些值的位置(以某种方式仍然会收集垃圾等)。非平凡。