【发布时间】:2015-10-23 17:40:12
【问题描述】:
是否有一个 .net 方法可以确定给定对象实例之前是否调用过给定方法?
有时,属性 getter 方法会产生副作用。例如,如果先前未调用属性 getter,则可能需要创建其他对象并执行其他工作以返回支持字段的值。我不能让这种事情发生。如果之前没有调用过 getter 方法,则不需要该值。
例如...
object item = something;
foreach (PropertyInfo propertyInfoForItem in item.GetProperties(Reflection.BindingFlags.Public)) {
//Need something to avoid calling this if the property getter method has not been previously been called for this item
object itemPropertyValue = nothing;
itemPropertyValue = propertyInfoForItem.GetValue(item, null);
}
我查看了从 PropertyInfo.GetGetMethod() 返回的 MethodInfo 类,但没有发现任何有用的东西。
有什么想法吗?
作为基于反馈的附加说明(感谢您的参与!),我将无法修改我正在检查的现有对象。
【问题讨论】:
-
您可以在对象本身中设置一个计数器。我不认为你正在寻找这样的方法。
-
拥有一个突然开始创建额外对象或其他任务的属性获取器不是一个好的设计我会说...为什么不确保您的属性获取器只提供一个值并使用 INotifyPropertyChanged界面表明发生了什么事?
-
顺便说一句,也许拦截器可以在这个地方提供帮助,但这在很大程度上取决于您使用的框架(IOC?)
-
感谢大家的反馈。不幸的是,我没有修改现有对象的奢侈。
标签: c# .net reflection system.reflection propertyinfo