Статический метод - это обычное поведение? - PullRequest
2 голосов
/ 01 июня 2011

Есть небольшие сомнения со статическим методом.

Документация гласит, что «Статический метод не может получить доступ к переменной члена экземпляра, ИЛИ статические методы и свойства могут получить доступ только к статическим полям и статическим событиям, поскольку он выполняется намного раньше, чем создается экземпляр». Итак, приведенный ниже код не может скомпилировать

class staticclass
{
    int a = 20; //Private member

    public static void staticmethod()
    {
        Console.WriteLine("Value Of Instance member variable is: {0}",a);  // Error
    }

}

Но мы также знаем, что внутри статического метода мы можем создать экземпляр того же класса.

Итак, немного изменив приведенный выше код, я могу получить доступ к переменной экземпляра в статическом методе

class staticclass
{
    int a = 20; //PRivate Memeber

    public static void staticmethod()
    {
        staticclass sc = new staticclass(); 
        Console.WriteLine("Value Of Instance member variable is: {0}",sc.a);  
    }

}

Это прекрасно компилируется и отображает результат Value Of Instance member variable is: 20.

Это нормальное поведение? ИЛИ Я не могу понять это правильно?

Я имею в виду, если это так, то Как эти утверждения верны static methods can only access static fields?

Спасибо.

1 Ответ

5 голосов
/ 01 июня 2011

Вы не понимаете, что означает статический - это означает, что у вас есть доступ только к статическим членам this.Он не ограничивает доступ к нестатическим членам другого объекта.

Тот факт, что «другой» объект, к которому вы обращаетесь в статическом методе, является экземпляром того же класса, не имеет значения.

...