我有一个调用另一个函数的函数。我想知道在第二个函数中是否可以检测是否正在使用范围内的第一个函数调用它。如果我能检测到它,我想访问使用范围内的变量。我无法通过参数发送变量。
例如:
// Normal call to OtherFunction
void function1()
{
SomeClass.OtherFunction();
}
// Calling using someVar
void function2()
{
using(var someVar = new someVar())
{
SomeClass.OtherFunction();
}
}
// Calling using other variable, in this case, similar behaviour to function1()
void function3()
{
using(var anotherVar = new anotherVar())
{
SomeClass.OtherFunction();
}
}
class SomeClass
{
static void OtherFunction()
{
// how to know if i am being called inside a using(someVar)
// and access local variables from someVar
}
}
答案 0 :(得分:2)
您可以使用与System.Transaction.TransasctionScope
相同的机制。这仅适用于所有上下文都可以具有相同基类的情况。基层在施工期间将自己注册为静态财产,并在处置时自行移除。如果另一个Context
已经处于有效状态,则会被推迟,直到再次处置最新的Context
为止。
using System;
namespace ContextDemo
{
class Program
{
static void Main(string[] args)
{
DetectContext();
using (new ContextA())
DetectContext();
using (new ContextB())
DetectContext();
}
static void DetectContext()
{
Context context = Context.Current;
if (context == null)
Console.WriteLine("No context");
else
Console.WriteLine("Context of type: " + context.GetType());
}
}
public class Context: IDisposable
{
#region Static members
[ThreadStatic]
static private Context _Current;
static public Context Current
{
get
{
return _Current;
}
}
#endregion
private readonly Context _Previous;
public Context()
{
_Previous = _Current;
_Current = this;
}
public void Dispose()
{
_Current = _Previous;
}
}
public class ContextA: Context
{
}
public class ContextB : Context
{
}
}
答案 1 :(得分:0)
为您可以从Someclass.OtherFunction()中访问的变量创建公共getter,并根据调用的函数设置变量值,以便识别调用者。