3

これは純粋に学問的な質問です。私は簡単に回避策を見つけました。

VB.Net クラスを C# に移植しているときに、new() ステートメントのパラメーターとして this キーワードを使用するクラスのフィールドの宣言に出くわしました。コンパイラは、「キーワード '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 ページ以上でその啓示を見逃している可能性があります)。これは事実ですか、それともフィールド宣言の前の行の 1 つで何らかのエラーを確認する必要がありますか?

4

1 に答える 1

3

C# 言語仕様のセクション 7.6.7を見ると、次のようになります。

7.6.7 このアクセス

this アクセスは、インスタンス コンストラクター、インスタンス メソッド、またはインスタンス アクセサーのブロックでのみ許可されます。... (詳細は省略) ... 上記以外のコンテキストの primary-expression で this を使用すると、コンパイル時エラーが発生します。特に、静的メソッド、静的プロパティ アクセサー、またはフィールド宣言の変数初期化子で this を参照することはできません。

したがって、上記の例の変数初期化子で使用すると、コンパイル時エラーになります。これを修正するには、初期化をコンストラクターに移動します。

于 2012-09-22T13:10:19.593 に答える