1

次の宣言に問題がありました。

byte[] frameBuffer = new byte[VideoFile.FRAME_SIZE];

これを、作成したクラスの変数として宣言しました。残念ながら、Visual Studio はその下に黄色の波線を配置し、"FRAME_SIZE" を現在のコンテキストに存在しないものとして宣言しました。くねくねした黄色い線が気になります。まったく存在しない名前を付けると、波線の赤い線が使用されますが、FRAME_SIZE が存在するため、黄色の線が表示されます。

FRAME_SIZE次のようにクラスで宣言さVideoFileれます。

public static readonly int FRAME_SIZE = 2621440;

私が参照すると他のケースでは機能しますが、この特定のケースでは機能しません。恐ろしい黄色の波線が表示されない他の宣言を試してみました。

最初の実験:

    const int NEW_FRAME_SIZE = 256;
    byte[] frameBuffer2 = new byte[NEW_FRAME_SIZE];        

2 番目の実験:

    int thisworks = VideoFile.FRAME_SIZE;

最終的に、元の宣言をクラスのコンストラクター内に配置したところ、機能しました。

byte[] frameBuffer = new byte[VideoFile.FRAME_SIZE]; // placed in constructor

この問題を調査すると多くの結果が得られましたが、特に私の質問に答えるものはありませんでした:

名前 'controlname' は現在のコンテキストに存在しません

名前 'controlname' は現在のコンテキストに存在しません

名前 XXXX は現在のコンテキストに存在しません

この問題は、コンストラクターの外部で初期化にこの特定の変数を使用できないことに関連していると思いますが、これをさらに調査できる場所への参照とともに明確な答えを得たいと思います。

4

1 に答える 1

2

FRAME_SIZE は静的であり、静的なコンテキストからのみアクセスできるため、この動作が見られます。静的メンバ変数参照が作成される前にコンストラクタが実行されるため、コンストラクタは FRAME_SIZE にアクセスできます。

静的として宣言された他のクラスは、FRAME_SIZE にアクセスできます (アクセス修飾子が許可する限り)。

関連する質問

MSDN の記事

于 2013-09-05T19:33:48.893 に答える