我有这样的一个类。以下代码是否线程安全
public abstract class HtmlObject<T>
{
public HtmlObject() {}
public HtmlObject(string id, string name, T value)
{
this.ID = id;
this.Name = name;
this.Value = value;
}
public string ID { get; set; }
public string Name { get; set; }
public T Value { get; set; }
public abstract string Build();
}
用一个看起来像这样的具体实现。
public class HtmlRadio : HtmlObject<string>
{
private const string RadioHtml = "<input type='radio' name='{0}' value='{1}' {2} />{1}<br />";
public bool Checked { get; set; }
public override string Build()
{
if (this.Checked)
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, "checked='checked'");
else
return string.Format(HtmlRadio.RadioHtml, this.Name, this.Value, string.Empty);
}
}
而我想知道的是,如果如果在线程的呼吁,Build()
将是安全的。我的假设是它不会因为如果我采取以下一系列调用
HtmlRadio radio = new HtmlRadio();
radio.Checked = false;
//Something could happen here?
string result = radio.Build();
我的理解是,radio.Checked
价值可能它被设置和调用Build()
,这是正确的之间改变?如果是的话,如果我想要怎么修复这个问题呢?
究竟是什么,你认为“可能发生在这里”? – Chris
您在这里有顺序很重要的一系列操作。当命令*不重要时,线程是最好的。你将不得不做一些工作来确保'Build'在属性被设置后才被调用......这就像是根本没有对它进行线程化。 –