Является ли статическая переменная общей для экземпляров классов? - PullRequest
3 голосов
/ 02 сентября 2011

У меня есть класс ниже.Переменная _commandLine объявлена ​​как статическая.Будет ли эта переменная разделена между экземплярами класса WkHtml?

ps Было бы здорово иметь инструмент, который бы отображал такую ​​информацию в VS.Например, разработчик выбирает переменную и получает информацию о переменной, является ли переменная общей для классов, является ли она потокобезопасной и т. Д.

public class WkHtml
{
    private static string _commandLine;

    public void AddCommandLine(object value)
    {
        AddCommandLine("{0}", value);
    }

    public void AddCmdWithCond(string value, bool condition, object compareValue)
    {
        AddCmdWithCond(value, condition, compareValue, "");
    }

    public void AddCmdWithCond(string value, bool condition, object compareValue, string defaultValue)
    {
        if (compareValue != null && !string.IsNullOrEmpty(compareValue.ToString()) && Helpers.GetBool(compareValue) == condition)
            AddCommandLine("{0}", value);
        else
            if (defaultValue != null)
                AddCommandLine("{0}", defaultValue);
    }

    public void AddCommandLine(object parameter, object value, object defaultValue)
    {
        if (value == null || string.IsNullOrEmpty(value.ToString()))
        {
            value = defaultValue;
        }
        AddCommandLine(parameter, value);
    }

    public void AddCommandLine(object parameter, object value)
    {
        if (value == null || string.IsNullOrEmpty(value.ToString())) return;
        _commandLine = _commandLine + string.Format(parameter.ToString(), value) + " ";
    }

    public string GetCommandLine
    {
        get { return _commandLine; }
    }

}

Ответы [ 4 ]

10 голосов
/ 02 сентября 2011

static переменные совместно используются всеми экземплярами класса.

Я не вижу причин, почему вы должны объявить его статическим?

5 голосов
/ 02 сентября 2011

Будет ли эта переменная совместно использоваться экземплярами класса WkHtml?

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

и получить информацию о переменной, если переменная распределяется между классами

, которые вы уже делаете - Sсимвол в значении intellisense и модификатор static.

является ли он потокобезопасным

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

2 голосов
/ 02 сентября 2011

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

1 голос
/ 02 сентября 2011

static переменные действительно являются «общими» для экземпляров классов, хотя они не зависят от экземпляров. Переменная static является частью класса, но не экземплярами этого класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...