следующий код, используемый для работы в режиме vs2008:
namespace N2.Engine.Globalization
{
public class DictionaryScope : Scope
{
object previousValue;
public DictionaryScope(IDictionary dictionary, object key, object value)
: base(delegate
{
if (dictionary.Contains(key))
previousValue = dictionary[key];
dictionary[key] = value;
}, delegate
{
if (previousValue == null)
dictionary.Remove(key);
else
dictionary[key] = previousValue;
})
{
}
}
}
но теперь он сообщает, что для нестатического поля, метода или свойства требуется ссылка объекта. 'N2.Engine.Globalization.DictionaryScope.previousValue'
Кажется, что что-то изменилось в компиляторе? Любые обходные пути?
обновление:
относительно предложения использовать виртуальный метод. Возможно, это тоже не сработает, поскольку виртуальный метод будет вызван из базового конструктора, который, как мне кажется, также невозможен?
Вот реализация области действия (базовый класс):
public class Scope: IDisposable
{
Action end;
public Scope(Action begin, Action end)
{
begin();
this.end = end;
}
public void End()
{
end();
}
#region IDisposable Members
void IDisposable.Dispose()
{
End();
}
#endregion