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/

10-13 01:10