在C#中通过调用堆栈共享一个实例

本文关键字:实例 一个 共享 堆栈 调用 | 更新日期: 2023-09-27 18:28:21

请检查以下功能:

public void DoJob()
{
    CheckPrivilege();
    DoJob2();
}
public void DoJob2()
{
    CheckPrivilege();
    DoJob3();
}

如您所见,如果我调用DoJob()CheckPrivilege()函数将运行两次。有时我可以直接调用DoJob2(),所以我无法从DoJob2()中删除CheckPrivilege()函数。

所以我需要知道CheckPrivilege()函数是在同一调用堆栈中的另一个函数中调用的。

也就是说,我想通过调用堆栈共享Privilege对象。

这可能吗?如果是,如何?

在C#中通过调用堆栈共享一个实例

有很多方法可以做到这一点,但"通过调用堆栈共享"是不可能的。您可以保留一个状态变量,指示当前任务是否具有权限或执行类似操作。

function void DoJob()
{
    CheckPrivilege();
    DoJob2(false);
}
function void DoJob2(bool doPrivCheck)
{
    if (doPrivCheck)
       CheckPrivilege();
    DoJob3();
}

定义"内部"answers"外部"接口函数。外部函数进行权限检查,任何人都可以调用;内部函数不进行检查,只应由实现调用。

将您的功能视为"外部"功能:

function void DoJob()
{
    CheckPrivilege();
    DoJob2_Internal();
}
function void DoJob2()
{
    CheckPrivilege();
    DoJob3_Internal();
}
function void DoJob2_Internal()
{
    DoJob3_Internal();
}

这个原则适用于任何语言——我不是C#程序员,所以我不能告诉你C#的哪些特定功能会强制执行访问控制或函数可见性,或者你是否必须依赖约定。