C# 类实例之间是否共享静态变量
我有下面的班级_命令行变量声明为静态。此变量是否将在WkHtml类实例之间共享 p、 如果有一个工具可以在VS中显示这些信息,那将是很酷的。例如,开发人员选择变量并获取关于变量的信息,变量是否在类之间共享,是否线程安全等等C# 类实例之间是否共享静态变量,c#,class,static,C#,Class,Static,我有下面的班级_命令行变量声明为静态。此变量是否将在WkHtml类实例之间共享 p、 如果有一个工具可以在VS中显示这些信息,那将是很酷的。例如,开发人员选择变量并获取关于变量的信息,变量是否在类之间共享,是否线程安全等等 public class WkHtml { private static string _commandLine; public void AddCommandLine(object value) { AddCommandLine("
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除了查看变量在代码中的使用方式外,思考变量的线程安全性是毫无意义的。