3

这是一个纯粹的学术问题-我很容易找到解决方法。

在将 VB.Net 类移植到 C# 时,我发现在一个类中声明了一个字段,该类使用 this 关键字作为 new() 语句中的参数。编译器说“关键字'this'在当前上下文中不可用'(VB编译器认为这种情况没有问题)。我很容易通过将字段的初始化移动到类的构造函数来解决这个问题。

编辑:阅读评论后,我添加了以下代码块

 
    public class cTransactions
    {
        private List Trans = new List();
        private List Archive = new List();
        private cDDs Debits = new cDDs(this); // complier error 
                                            //Keyword 'this' is not available in the current context
        private string path = Directory.GetCurrentDirectory() + "\";
        private bool dirty = false;
        private int LastID;
        // followed by Property declarations, ctor, methods etc.
        //...
    }
     

但是,在执行类的构造函数之前,我找不到对关键字“this”不可用的任何引用(尽管我可能错过了 500 多页语言规范中的这一启示)。是这种情况还是我应该在字段声明之前的其中一行中查看一些错误?

4

1 回答 1

3

查看C# 语言规范第 7.6.7 节:

7.6.7 本次访问

仅在实例构造函数、实例方法或实例访问器的块中才允许this访问。...(省略细节) ...在除上面列出的上下文之外的上下文中的主表达式中使用 this 是编译时错误。特别是,不可能在静态方法、静态属性访问器或字段声明的变量初始化程序中引用它。

因此,在上面示例中的变量初始化器中使用它是一个编译时错误。要修复它,请将初始化移动到构造函数中。

于 2012-09-22T13:10:19.593 回答