首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将方法作为另一个方法的参数传递

如何将方法作为另一个方法的参数传递
EN

Stack Overflow用户
提问于 2012-07-22 02:02:41
回答 6查看 139关注 0票数 0

我需要检查在"parent“对象中,是否有一个可以接受的方法在某个特定时刻调用”孩子“中的某个方法。例如,父对象(组件)包含子对象(换句话说就是组件部分),而父对象现在正在释放,因此必须禁止所有(或部分)子活动(即启动新服务线程、排队新客户端请求等)。

代码语言:javascript
运行
复制
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 ...
        ...            
    }
}

有什么办法可以做到吗?

EN

回答 6

Stack Overflow用户

发布于 2012-07-22 02:17:35

注意:我是在回答你的问题,而不是你的标题。其他人已经回答了标题。

有些对象有一个isDisposed属性,如果你的父对象实现了这个属性,并且这是你唯一不想调用方法的时候,那么可以。否则就不会。如果您控制了父对象的源代码,则可以添加一个执行所需操作的属性。

如果您不控制源代码,并且希望检查不止isDisposed,或者父对象没有实现isDisposed,那么您也许能够检查公开的属性,但通常您应该假设,如果一个方法向公众公开,则可以在任何时候调用它。如果你通过反射调用私有方法,那么你就是在冒险。

响应注释编辑:根据你的描述,委托不会给你任何额外的功能,你不能通过向父代理添加属性和方法来更容易地完成这些功能(如果你不控制源代码,它们根本不会有帮助)。处理您所描述的场景的最佳方法(CAR.ENGINE.START当汽油耗尽时,启动方法要么抛出异常,要么返回一个指示尝试启动引擎的结果的值)。

票数 7
EN

Stack Overflow用户

发布于 2012-07-22 02:04:52

使用委托?

http://msdn.microsoft.com/en-us/library/ms173171%28v=vs.80%29.aspx

票数 2
EN

Stack Overflow用户

发布于 2012-07-22 02:05:48

使用func Func<T, TResult> link

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11594630

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档