雖本不打算寫 ISupportInitialize,但為系列完整性仍補充此文。MSDN 定義:指定物件支援批次初始化的簡易交易通知,允許控件優化多組屬性,於設計時初始化相依屬性或批次設定多屬性。
介面包含兩方法:
BeginInit():通知初始化即將開始EndInit():通知初始化完成範例:Class1 需在初始化完成後執行 Test1()(依賴屬性 A、B)。
public class Class1 : Component, ISupportInitialize {
public Class1() { /* 位置1:A、B 未賦值 */ }
private string _a;
public string A {
get { return _a; }
set { _a = value; /* 位置2:A 有值,B 無值 */ }
}
private string _b;
public string B {
get { return _b; }
set { _b = value; /* 位置3:A、B 皆有值 */ }
}
public void BeginInit() { }
public void EndInit() { _c2.B(); /* 位置4:所有屬性賦值完成 */ }
public void Test1() { MessageBox.Show(A + ":" + B); }
}
程式設計師難知屬性賦值順序(先 A 後 B 或反),故不可在 setter 執行相依邏輯。EndInit() 確保所有屬性已賦值,是執行相依初始化的最佳時機。