【问题标题】:C# this operator in class field declarationC# 类字段声明中的 this 运算符
【发布时间】:2012-09-22 09:20:40
【问题描述】:

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

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

edit:阅读cmets后,我添加了以下代码块

 
    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 多页语言规范中的启示)。是这种情况还是我应该在字段声明之前的其中一行中查看一些错误?

【问题讨论】:

  • vb.net中没有“this”关键字
  • 实际上在这方面存在一些编译器错误 - 尽管我不记得具体细节。也许最好的办法是发布有问题的代码行。
  • @MUG4N - 我没有明确指出 VB.Net 以上述方式使用关键字 me 没有问题。
  • 欢迎来到 SO!我不会费心回复关于阅读语言规范等的狙击。如果每个人都阅读他们应该阅读的每一份文档,那么就很简单了!所以在问一个简单的问题之前批评一个SO初学者没有阅读500页的文档有点过分!
  • 你能把原来的 VB.NET 代码贴在你看到这个的地方吗?

标签: c#


【解决方案1】:

查看C# Language specification 7.6.7 节:

7.6.7 此访问权限

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

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

【讨论】:

  • 谢谢你,阿克顿。我确实阅读了这一节,但没有意识到字段声明实际上是在指定的块之外。我的错。再次感谢。
猜你喜欢
  • 1970-01-01
  • 2020-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
相关资源
最近更新 更多