【发布时间】:2015-11-13 06:33:23
【问题描述】:
下面的 sn-p 来自 HackerRank
class myfun
{
int x;
static int y;
void fun()
{
x = 1;
y = 1;
}
static void gun()
{
x = 1;//An object reference error
y = 1;
}
static void Main()
{
myfun.gun();
//Error 1 The namespace already contains a definition for 'myfun'
}
}
为什么这个错误说它已经包含一个定义?
编辑:我交叉检查了同一解决方案中的其他文件,发现它已在另一个类文件中使用。所以其中一个问题解决了。错误已包含定义已解决。但我仍然不清楚如何在静态函数中使用变量。我可以通过将其更改为静态来实现它。但任何人都可以为此提出替代方案吗?
在静态方法中访问变量的最佳方法是什么?
【问题讨论】:
-
第一个问题是
int x不是static,而是用static方法解决的:static void gun() { x = 1; ...} -
帖子中提供的代码不会因 C# 中的错误而失败(忽略
x = 1;它编译得很好)。请确保您粘贴了正确的代码/错误。请参阅minimal reproducible example 获取指导。 -
此外,没有迹象表明此问题与 ASP.NET 之间存在 任何 联系...
-
你用的是什么ide版本?
-
要访问实例变量,您需要一个instance。这意味着在某处必须有an instantiation,比如
var myInstance = new myfun();(顺便说一句,你的名字很糟糕;1)myfun 不是一个函数,2)不要用“my”作为前缀,3)使用 PascalCasing C# 中的类名)。因此,myfun的每个实例都有自己的一组实例变量(x),而静态变量(在您的情况下为y)在类型级别定义并在所有实例之间共享。