【问题标题】:How do I set properties related to the calling method's scope?如何设置与调用方法范围相关的属性?
【发布时间】:2011-02-18 05:01:42
【问题描述】:

我不是在寻找一种使用“SetData”方法将值与线程相关联的方法。

我需要存储一些只存在于调用方法范围内的数据,可以是直接父级或在堆栈上进行的任何其他调用。 例如:

void SomeMethod()
{
   string someInfo = "someInfo";
   SomeOtherMethod();   
   object data = GetDataOnCurrentScope("someKey");
}

void SomeOtherMethod()
{
   SetDataOnParentScope("someKey", somevalue);
}

在这种情况下,“someInfo”局部变量和带有“someKey”键的数据集都将在“SomeMethod”返回后消失。这样的事情可能吗?这可能违反堆栈规则,但谁知道是否有人有想法......

obs:目前,我想唯一的方法是让编译器在每个方法的调用堆栈的开头声明对字典的引用。当方法返回时,该字典将有资格进行垃圾收集。

【问题讨论】:

  • 简单地返回一个值是否存在问题,您可能嵌套了多个方法,并且需要在一个或多个其他级别(调用堆栈上下)使用该值?跨度>
  • 不是这样的,我很难在方法拦截中使用它

标签: c# .net clr callstack


【解决方案1】:

就您提供的示例个人而言,我不知道这会有什么用,从实施的角度来看,它将是一个皇家 PITA。

您在这里描述的是一个返回值的函数,那么为什么不具有返回类型并按照设计的方式使用方法呢?

【讨论】:

  • 这在AOP中很有用,例如,如果'SomeMethod'要求一个对象打开一个数据库连接,可以拦截数据库打开方法并设置一个与'SomeMethod的调用范围相关的事务',无需设置预定义的拦截点。
【解决方案2】:

如果你想要从一个方法到另一个方法而不是其他地方的东西,你通常会在第一个方法中创建一个对象并将它作为参数传递给第二个方法,或者让第二个方法返回第一个方法所需的对象。这取决于谁首先需要该对象。

【讨论】:

    猜你喜欢
    • 2013-11-27
    • 2012-04-16
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多