Разница между "глобальной переменной" и "полем"?

Fields переменные внутри класса или структуры, local variables сидеть внутри метода и global variables доступны в каждой области (класс и метод включены).

это заставляет меня думать, что fields может быть global variables а то global variables не обязательно fields хотя я не могу думать о переменной, сидящей вне класса.

есть ли четкое различие между ними?

4 ответов


вы пометили этот C# и C# не имеют глобальных переменных.

но a public static поле (или свойство) приближается. Статика делает его сингулярным и дает ему "глобальное" время жизни.


глобальные переменные-это переменные, которые доступны во всей области, как вы говорите, обычно это делается с static классы. Пример кода:

public class Demo {
    public static string ThisIsGlobal = "Global";
    private string _field = "this is a field in the class";
    public void DoSomething()
    {
        string localVariable = "Local";
        string localVariable2 = ThisIsGlobal; // VALID
    }

    public static void GlobalMethod()
    {
        string localVariable = _field; // THIS IS NOT VALID!
    }
}

многие люди говорят, что глобальные переменные и состояние плохие, я так не думаю, пока вы используете его так, как он должен использоваться. В приведенном выше примере ThisIsGlobal является глобальной переменной, потому что она имеет static ключевое слово. Как вы видите в примере, вы можете получить доступ к статическим переменным из методов экземпляра, но не к переменным экземпляра из статический метод.


Я думаю, что определение Википедии уместно здесь:

в объектно-ориентированном программировании поле (также называемое членом данных или переменной-членом) - это данные, инкапсулированные в класс или объект. В случае обычного поля (также называемого переменной экземпляра) для каждого экземпляра объекта существует переменная экземпляра: например, класс Employee имеет поле Name и существует одно отдельное имя для каждого сотрудника. Статическое поле (также называемое переменной класса) является одним переменная, которая является общей для всех экземпляров.

таким образом, глобальная переменная в значительной степени является статическим полем (и, следовательно, полем).


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

но глобальная переменная по-прежнему является полем некоторого класса/модуля.