我需要检查在"parent“对象中,是否有一个可以接受的方法在某个特定时刻调用”孩子“中的某个方法。例如,父对象(组件)包含子对象(换句话说就是组件部分),而父对象现在正在释放,因此必须禁止所有(或部分)子活动(即启动新服务线程、排队新客户端请求等)。
public class Parent
{
public bool IsMethodCallAcceptable(reference_to_method) {...}
}
public class Child
{
public int SomeMethod(int intArg, string stringArg)
{
if(!_parent.IsMethodCallAcceptable(reference_to_SomeMethod_with_actual_args))
throw new ...
...
}
private void AnotherMethod(string param = null) {...}
{
if(!_parent.IsMethodCallAcceptable(reference_to_AnotherMethod_with_actual_args))
throw new ...
...
}
private Guid ThirdMethod()
{
if(!_parent.IsMethodCallAcceptable(reference_to_ThirdMethod))
throw new ...
...
}
}有什么办法可以做到吗?
发布于 2012-07-22 02:17:35
注意:我是在回答你的问题,而不是你的标题。其他人已经回答了标题。
有些对象有一个isDisposed属性,如果你的父对象实现了这个属性,并且这是你唯一不想调用方法的时候,那么可以。否则就不会。如果您控制了父对象的源代码,则可以添加一个执行所需操作的属性。
如果您不控制源代码,并且希望检查不止isDisposed,或者父对象没有实现isDisposed,那么您也许能够检查公开的属性,但通常您应该假设,如果一个方法向公众公开,则可以在任何时候调用它。如果你通过反射调用私有方法,那么你就是在冒险。
响应注释编辑:根据你的描述,委托不会给你任何额外的功能,你不能通过向父代理添加属性和方法来更容易地完成这些功能(如果你不控制源代码,它们根本不会有帮助)。处理您所描述的场景的最佳方法(CAR.ENGINE.START当汽油耗尽时,启动方法要么抛出异常,要么返回一个指示尝试启动引擎的结果的值)。
发布于 2012-07-22 02:04:52
使用委托?
http://msdn.microsoft.com/en-us/library/ms173171%28v=vs.80%29.aspx
发布于 2012-07-22 02:05:48
使用func Func<T, TResult> link
https://stackoverflow.com/questions/11594630
复制相似问题