【发布时间】:2010-01-25 18:14:32
【问题描述】:
以下代码在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”需要对象引用
编译器似乎发生了一些变化?任何解决方法?
更新:
关于使用虚拟方法的建议。这可能也行得通,因为虚拟方法将从基本构造函数中调用,我相信这也是不可能的?
这里是Scope(基类)的实现:
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
【问题讨论】:
-
这也不应该在 C# 2 中编译。 stackoverflow.com/questions/1600662/this-null-in-c
-
确实,不建议从 ctor 调用虚拟方法,尽管我相信它可以编译(但可能......很麻烦)。我提到的虚拟方法是为了调用ctor的outside..
-
嗯,您能详细解释一下第二种解决方法吗?不知道我很明白...
标签: c# visual-studio-2010