Как установить свойства, связанные с областью действия вызывающего метода? - PullRequest
1 голос
/ 11 мая 2010

Я не ищу способ связать значения с потоком, используя метод 'SetData'.

Мне нужно хранить какие-то данные, которые будут существовать только во время вызова метода, это может быть непосредственный родитель или любой другой вызов, который выполняется в стеке. Например:

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

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

В этом случае и локальная переменная someInfo, и набор данных с ключом someKey исчезнут после возврата SomeMethod. Возможно ли что-то подобное? Это может идти вразрез с правилами стека, но кто знает, есть ли у кого-то идея ...

obs: В настоящее время я предполагаю, что единственный способ - заставить компилятор объявить ссылку на словарь в начале стека вызовов каждого метода. Этот словарь будет иметь право на сборку мусора, когда метод вернется.

Ответы [ 2 ]

1 голос
/ 11 мая 2010

Лично на примере, который вы приводите, я не понимаю, как это будет полезно, и с точки зрения реализации это будет королевская PITA.

То, что вы здесь описываете, - это функция, которая возвращает значение, так почему бы не иметь тип возвращаемого значения и использовать методы в том виде, в котором они разработаны?

0 голосов
/ 11 мая 2010

Если вы хотите, чтобы что-то находилось в области видимости от одного метода к другому, и нигде больше, вы обычно создаете объект в первом методе и передаете его в качестве параметра второму, или же второй метод возвращает объект, необходимый первому. Это зависит от того, кому нужен объект первым.

...