0

我有一个调用另一个函数的函数。我想知道在第二个函数中是否可以检测到它是否是从使用范围内的第一个函数调用的。如果我能检测到它,我想访问该使用范围内的变量。我无法通过参数发送变量。

例如:

// 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
    }
}
4

2 回答 2

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
    {
    }
}
于 2013-05-10T16:28:40.093 回答
0

为您可以从 Someclass.OtherFunction() 中访问的变量创建公共 getter,并根据调用的函数设置变量值,以便您可以识别调用者。

于 2013-05-10T16:26:27.697 回答