Доступ к статической функции внутри class-С#

У меня есть приведенный ниже фрагмент из 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' 
    }
}

Почему эта ошибка говорит, что уже содержит определение?

Изменить: я перепроверил другие файлы в том же решении и обнаружил, что он использовался еще в одном файле класса. Итак, одна из проблем решена. Ошибка уже содержит определение устранена. Но все еще неясно, как использовать переменную внутри статической функции. Я могу добиться этого, изменив его на статический. но кто-нибудь может предложить альтернативы для этого?

Каков наилучший подход к доступу к переменной внутри статического метода?


person Tom Cruise    schedule 13.11.2015    source источник
comment
Первая проблема заключается в том, что int x не является static, а адресуется методом static: static void gun() { x = 1; ...}   -  person Dmitry Bychenko    schedule 13.11.2015
comment
Код, представленный в сообщении, не дает этой ошибки в C # (игнорируя x = 1;, он отлично компилируется). Пожалуйста, убедитесь, что вы вставили правильный код/ошибку. См. минимально воспроизводимый пример для руководства.   -  person Alexei Levenkov    schedule 13.11.2015
comment
Кроме того, нет никаких указаний на какую-либо связь между этим вопросом и ASP.NET...   -  person Jon Skeet    schedule 13.11.2015
comment
какую версию ide вы используете?   -  person Grundy    schedule 13.11.2015
comment
Чтобы получить доступ к переменной экземпляра, вам нужен экземпляр. Это означает, что где-то должен быть экземпляр, например var myInstance = new myfun(); (ужасно имя, которое у вас есть, между прочим; 1) myfun не является функцией, 2) не добавляйте к вещам префикс my, 3) используйте PascalCasing для имен классов в C#). Таким образом, каждый экземпляр myfun будет иметь свой собственный набор переменных экземпляра (x), в то время как статические переменные (y в вашем случае) определяются на уровне типа и используются всеми экземплярами.   -  person Groo    schedule 13.11.2015


Ответы (2)


Ваш код не компилируется:

class myfun
{
    int x; // <- non static, instance
    ...
    static void gun()
    {
        x = 1; // <- ...but addressed within static method
        y = 1;
    }  

вероятно, вам следует сделать x статичным; другая проблема заключается в том, что если вы имеете в виду стандартный метод main (например, в C, C++, Java), вы должны выразить это так:

  // Note capitalization
  static void Main() { ... }

https://msdn.microsoft.com/en-us/library/ms228506(v=vs.90).aspx

person Dmitry Bychenko    schedule 13.11.2015
comment
Спасибо, что поправили меня. Пожалуйста, смотрите мой обновленный вопрос. Но как я могу ссылаться на нестатическую переменную в статическом методе? - person Tom Cruise; 13.11.2015
comment
@user833985 user833985, ваш код по-прежнему вызывает Для нестатического поля, метода или свойства 'myfun.x' требуется ссылка на объект. - person Grundy; 13.11.2015
comment
@Grundy.. в этом ответе также упоминается та же ошибка. Я ищу решение для того же и моего предыдущего комментария, я поднял тот же вопрос о том, как ссылаться на нестатическую переменную в статическом методе? - person Tom Cruise; 13.11.2015

ваша первая проблема заключается в том, что вы вызываете X из своего статического метода. Это должно вызвать ошибку. Это ошибочная функция, которую вы пытаетесь вызвать из другой функции, вызов которой правильный, но функция, которую вы вызываете, неисправна, поэтому она никогда не должна work.вам лучше сделать X также статическим.

person Borshon saydur rahman    schedule 13.11.2015