在C#中通过调用堆栈共享一个实例
本文关键字:实例 一个 共享 堆栈 调用 | 更新日期: 2023-09-27 18:28:21
请检查以下功能:
public void DoJob()
{
CheckPrivilege();
DoJob2();
}
public void DoJob2()
{
CheckPrivilege();
DoJob3();
}
如您所见,如果我调用DoJob()
,CheckPrivilege()
函数将运行两次。有时我可以直接调用DoJob2()
,所以我无法从DoJob2()
中删除CheckPrivilege()
函数。
所以我需要知道CheckPrivilege()
函数是在同一调用堆栈中的另一个函数中调用的。
也就是说,我想通过调用堆栈共享Privilege对象。
这可能吗?如果是,如何?
有很多方法可以做到这一点,但"通过调用堆栈共享"是不可能的。您可以保留一个状态变量,指示当前任务是否具有权限或执行类似操作。
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#的哪些特定功能会强制执行访问控制或函数可见性,或者你是否必须依赖约定。