зачем использовать статическое ключевое слово в методе - PullRequest
3 голосов
/ 17 августа 2011

Когда я думаю о чем-то «статичном». Я думаю о чем-то, что не меняется. Означает ли это, что нестатические методы могут изменяться, а статические - нет? Они ведут себя по-разному?

Ответы [ 5 ]

4 голосов
/ 17 августа 2011

(Предполагается, что вы говорите о C # здесь - это означает, что на разных языках немного разные вещи, поэтому вам будет разумно отметить свой вопрос именно тем, о чем вы спрашиваете.)

Слово«статический» здесь используется для обозначения «относящегося к типу, а не к конкретному экземпляру типа».Я полагаю, что он изначально использовался, потому что компилятор мог определять статически , что имел в виду член, в отличие от используемого элемента, определяемого динамически во время выполнения (например, при вызове виртуального метода), нотеперь он потерял много этого значения: (

Значение «статический = относится к самому типу, а не к экземпляру» имеет значение в C #, включая:

  • Статические переменные /методы / события / свойства
  • Статические классы (экземпляры никогда не создаются)
  • Статический конструктор (используется для инициализации самого типа)
  • Операторы (не называются on экземпляр - значения предоставляются в качестве параметров)
1 голос
/ 17 августа 2011

Статические методы не требуют экземпляра класса. В этом главное отличие.

  • Статический

    ClassName.MethodName ();

  • Не статично

    var obj = new ClassName (); obj.MethodName ();

0 голосов
/ 17 августа 2011

Речь идет не о методе, который будет изменен. Он о данных, над которыми работает метод.Если это статический метод, то данные, с которыми он работает, не зависят от экземпляра типа. Поэтому нам не нужен экземпляр для его вызова.

Подумайте о данных, с которыми работает метод. Это зависит от данныхна экземпляре или нет. Если не помечать метод как статический.

0 голосов
/ 17 августа 2011

Они не ведут себя по-разному.Как уже говорилось ранее, главное отличие в том, что вам не нужно создавать экземпляр класса этого метода.То же самое касается переменных.Пример:

class Foo
{
    public static void Bar() { ... }
    public void Bar2() { ... }
}

Foo.Bar(); //ok
Foo.Bar2(); //error

Но помните, статический метод не может получить доступ к нестатической переменной / методу в этом классе.

0 голосов
/ 17 августа 2011

Статические методы не требуют экземпляра класса и не могут неявно обращаться к данным (или этому, себе, Я и т. Д.) Такого экземпляра.

...