从今天开始,我是c#中的一个总菜鸟。我无法找到一个好的教程或任何东西,可以解决这个明显愚蠢的问题。基本上,我尝试将程序从Python转换为C#。通常在Python中我在构造函数中定义常量。我到底应该把它们放在c#中?我试着把它们放在构造函数中然后我把它们放在Main()中,因为有这个错误。但错误仍然存在。
static void Main(string[] args)
{
var _top = 0
...
}
public string[] topToken()
{
if (_top < _tokens.Count())
{ return _tokens[_top];}
答案 0 :(得分:2)
_top
在Main
内声明,因此它不会在topToken
方法中具有可见性。它是一个局部变量,仅限于Main
。
要为整个类提供变量可见性,您需要在任何方法之外声明它们。
例如:
public class SomeClass
{
public int someVariable; // all methods in SomeClass can see this
public void DoIt() {
// we can use someVariable here
}
}
注意,通过将someVariable公开,它也意味着我们可以直接访问它。例如:
SomeClass x = new SomeClass();
x.someVariable = 42;
如果要防止这种情况,只允许使用方法/属性/等。为了能够看到someVariable
变量的类,您可以将其声明为私有。
如果您需要公共变量,通常最好这样声明(这是auto-implemented property)的示例:
public class SomeClass
{
public int SomeVariable { get; set; }
public void DoIt() {
// we can use SomeVariable here
}
}
这使用
答案 1 :(得分:0)
将您的代码更改为:
const int _top = 0;
static void Main(string[] args)
{
...
}
public string[] topToken()
{
if (_top < _tokens.Count())
{ return _tokens[_top];}
要使_top
在整个班级都可访问,您必须将其声明为字段或常量。字段需要实际存储,而常量由编译器简单地替换为实际值。正如您将_top
描述为常量一样,我决定将其声明为此。
如果你需要一个字段而不是一个常量,你必须声明它static
,因为它是以静态方法访问的:
static int _top = 0;
由于public
的声明中没有protected
或_top
,因此该类是私有的。如果您愿意,可以在声明前添加private
,但如果缺少可见性,那将是默认值。
答案 2 :(得分:0)
如果您希望在_top
方法之外使用Main
,请将其放在此处:
int _top = 0; //here instead
static void Main(string[] args)
{
...
}
public string[] topToken()
{
if (_top < _tokens.Count())
{ return _tokens[_top];}
}