我有這樣的一個類。以下代碼是否線程安全
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'在屬性被設置後才被調用......這就像是根本沒有對它進行線程化。 –