public T Prop = new Ctor(Method);
private K Method(U controller, V request);
我知道它不能在这里访问Method
,因为Method
必须是static
。为什么是这样? Prop
不是static
。
更新:这是实际的签名:
public DataSource(Func<ControllerBase, AjaxDataTable.Request, Result> dataSelector)
以前的方法是这样的:
public AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource AjaxData =
new AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource(OnSelectData);
这不是问题,因为我不需要引用 this
,所以当我添加 this
并且它不再编译时,(该字段是一开始是我的,其他人也这样做过,所以不要因此而恨我)。我将其更改为以下内容:
private AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource ajaxData;
public AjaxDataTable<SourcesViewModel.Source.Channel>.DataSource AjaxData
{
get
{
if (ajaxData == null)
{
ajaxData =
new AjaxDataTable<SourcesViewModel.Source.Channel>
.DataSource(OnDataSelector);
}
return ajaxData;
}
}
但是 ajaxData
私有(private)字段将始终为 null
,这使得数据表每次都被重新实例化(这被附加到并发字典中,这会导致Exception
重复键)。我想知道如何分配给不引用 this
的字段。这是否会创建可在 object
的所有实例中重复使用的内容?
最佳答案
这是由于 C# 4 规范的第 10.5.5.2 节,其中包括:
A variable initializer for an instance field cannot reference the instance being created. Thus it is a compile-time error to reference
this
in a variable initializer [...]
您有效地引用了this
,因为您的代码等同于:
public T Prop = new Ctor(this.Method);
现在您可以争辩说此限制过于严苛,但那是另一回事了。请注意,您可以将其放入构造函数主体中:
public T Prop;
public Foo()
{
Prop = new Ctor(Method);
}
(我假设你不会真的有一个公共(public)领域,而且你会有合理的名字,等等:)
关于c# - 为什么这是在静态上下文中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8789431/