初始化类成员时,当前上下文中不存在名称XXX

时间:2013-09-05 19:21:50

标签: c# variables scope

我遇到以下声明的问题:

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

我将此声明为我创建的类中的变量。不幸的是,Visual Studio在其下面放置了一条波浪形的黄色线,并声明“FRAME_SIZE”在当前上下文中不存在。曲折的黄线让我感到困扰。如果我给它一个完全不存在的名称它使用一条波浪形的红线,但是因为FRAME_SIZE它存在,我得到一条黄线。

FRAME_SIZEVideoFile类中声明如下:

public static readonly int FRAME_SIZE = 2621440;

当我引用它时,它适用于其他情况,但不是在这种特殊情况下。我试过尝试其他声明,但没有给我带来可怕的黄色波浪形:

第一次实验:

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

第二次实验:

    int thisworks = VideoFile.FRAME_SIZE;

我终于将我的原始声明放在了类的构造函数中并且它起作用了:

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

研究这个问题产生了很多结果,但没有一个特别回答我的问题:

The name 'controlname' does not exist in the current context

The name 'controlname' does not exist in the current context

The name XXXX does not exist in the current context

我认为问题涉及无法在构造函数之外使用此特定变量进行初始化,但我希望得到一个明确的答案以及我可以进一步研究这一点的参考。

1 个答案:

答案 0 :(得分:2)

您看到此行为是因为FRAME_SIZE是静态的,只能从静态上下文访问。构造函数可以访问FRAME_SIZE,因为在创建静态成员变量引用之前执行构造函数。

声明为static的其他类将能够访问FRAME_SIZE(只要它们的访问修饰符允许)。

Related Question

MSDN Article