У меня есть приведенный ниже фрагмент из 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; ...}
- person Dmitry Bychenko   schedule 13.11.2015x = 1;
, он отлично компилируется). Пожалуйста, убедитесь, что вы вставили правильный код/ошибку. См. минимально воспроизводимый пример для руководства. - person Alexei Levenkov   schedule 13.11.2015var myInstance = new myfun();
(ужасно имя, которое у вас есть, между прочим; 1) myfun не является функцией, 2) не добавляйте к вещам префикс my, 3) используйте PascalCasing для имен классов в C#). Таким образом, каждый экземплярmyfun
будет иметь свой собственный набор переменных экземпляра (x
), в то время как статические переменные (y
в вашем случае) определяются на уровне типа и используются всеми экземплярами. - person Groo   schedule 13.11.2015