回答
一种方法有使虚拟财产,并在运行时创建通过一个子类反射发射,则重写性能,加入您的代码。但是,这是先进的,并且要求您始终确保创建子类(因此代码中没有“新”)。
但是;我想知道是否简单地实现INotifyPropertyChanged并处理事件更简单。另一种选择是首先将处理建立到普通课程中。有使这个少重复的某些方面,特别是如果你有一个共同的基类,你可以添加一个
protected void SetField<T>(ref T field, T value)
{
if(!EqualityComparer<T>.Default.Equals(field,value))
{
field = value;
// extra code here
}
}
随着
private int foo;
public int Foo {
get { return foo; }
set { SetField(ref foo, value); }
}
如果您的基类来自ContextBoundObject
,您可以在不同的上下文中创建对象(在同一个AppDomain
内)并拦截方法调用(这是属性的属性),并将自己的消息接收器插入远程接收器链中。
继承人一例
这篇文章实在太过分了,但确实强调它可以完成,我会尝试这个但没有属性。谢谢,当我知道更多时,我会发布一些更新。 – IanNorton 2010-12-06 06:28:57
在运行时不能直接取代它。如果这个属性是虚拟的,你可以使用一个DynamicProxy
,比如Castle的 http://www.castleproject.org/dynamicproxy/index.html ,为你创建一个代理类型来扩展你的类型,它的工厂可以用来获得一个有拦截方法的类。
或者,您可以沿着ContextBoundObject
路线或Enterprise Libaries Policy Injection
行驶。 http://msdn.microsoft.com/en-us/library/cc511729.aspx
被警告ContextBoundObject比Castle的动态代理慢得多,但是你不必声明你的方法是虚拟的。策略注入只允许你在调用建议之前或之后插入,所以如果你出于任何原因反对它,你不能停止调用。
如果您可以将此操作作为后编译步骤处理,则可以使用PostSharp或Mono.Cecil。
我个人正在使用我自己的动态代理,它允许用代理替换方法,但它几乎没有准备好石灰灯。
- 1. 在运行时设置href属性
- 2. 在运行时设置类属性
- 3. 在运行时设置sample_variables属性
- 4. 在运行时Log4Php属性设置
- 5. 在运行时设置点属性?
- 6. 设置属性@运行时间
- 7. 设置属性在运行时属性的类别
- 8. 如何设置属性“机器人:drawableTop”在运行时
- 9. OnpropertyChanged在运行时添加属性设置器
- 10. 属性设置器和方法DRY
- 11. 属性设置器的方法引用
- 12. 执行的方法/设置属性
- 13. 设置类属性时引用方法
- 14. 设置Cobol方法属性属性
- 15. 无法在运行时在浏览器控件中设置网址属性
- 16. Python:Nosetests:运行时可以在setup_class方法中设置属性/标签吗?
- 17. 春季:在孩子方面替代属性在运行时
- 18. 设置一个计算属性的从属键在运行时
- 19. 在运行时构建TcxGrid时将TcxSpinEdit属性设置为列
- 20. 设置方法运行一段时间?
- 21. C#WPF如何动态设置属性设置器方法?
- 22. 正确设置属性时执行其他代码的方法
- 23. 在运行时在代码中设置布局属性
- 24. 在Heroku上运行时在beforeSave上设置一些Parse.User属性
- 25. 如何在运行时在Converter对象上设置属性
- 26. 设置运行线程的属性
- 27. QML:SequencialAnimation的运行属性设置为false,但仍在运行
- 28. 在运行时设置序列化属性
- 29. 设置XAML属性在运行时会被覆盖吗?
- 30. 在运行时为控件设置Validation.Error属性
这非常接近我现在所拥有的,谢谢。这确实可以完成这项工作,但意味着我必须手动拦截所有呼叫。 – IanNorton 2010-12-06 06:23:07