C# 类实例之间是否共享静态变量

C# 类实例之间是否共享静态变量,c#,class,static,C#,Class,Static,我有下面的班级_命令行变量声明为静态。此变量是否将在WkHtml类实例之间共享 p、 如果有一个工具可以在VS中显示这些信息,那将是很酷的。例如,开发人员选择变量并获取关于变量的信息,变量是否在类之间共享,是否线程安全等等 public class WkHtml { private static string _commandLine; public void AddCommandLine(object value) { AddCommandLine("

我有下面的班级_命令行变量声明为静态。此变量是否将在WkHtml类实例之间共享

p、 如果有一个工具可以在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; }
    }

}

静态
变量在所有类实例之间共享


我看不出你为什么要将其声明为静态?

是的,它是一个类变量,该类的所有实例都将看到相同的属性值。如果一个实例更改了它,它将反映所有实例。

静态
变量确实在类实例之间“共享”,虽然它是实例独立的。
static
变量是类的一部分,但不是该类的实例

此变量是否将在WkHtml类实例之间共享

是的,它确实存在——同样,它不适用于任何类型,而是:类型本身。您可以使用静态变量而不使用该类型的任何实例

并获取有关变量的信息,变量是否在类之间共享

您已经这样做了-intellisense中的
S
符号和
静态
修饰符

它是线程安全的吗


这更为复杂,并且无法通过这样的方法进行评估-如果不深入了解代码及其使用方式,就不可能对线程安全性进行评论。

Strong+1关于最后一点<代码>静态这里看起来完全不正确C#中的字符串是线程安全的,因为它是不可变的。为什么它不应该是线程安全的?(我要补充一点,他是以非线程安全的方式使用的,因为他在同一个函数中多次重新读取该值,认为该值在读取之间不会改变)@xanatos字符串不是变量,而是对象。是的,字符串对象是线程安全的(除非恶意攻击),但字符串变量不是
\u commandLine=\u commandLine+string….
就是一个很好的例子;这会忽略相互竞争的更改,并可能导致数据丢失。我认为答案应该是“在您的代码中没有”,因为他在
\u commandLine=\u commandLine+string.Format(parameter.ToString(),value)+”中犯了那个特定的错误
@xanatos除了查看变量在代码中的使用方式外,思考变量的线程安全性是毫无意义的。