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 节,其中包括:
您有效地引用了 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/