我认为,Designer使用ISupportInitialize
接口的那些方法来支持优化,确保控件初始化的原子性,并防止在初始化期间对控件执行任何操作。我的问题是:
答案 0 :(得分:6)
它与优化没有任何关系。当您的控件对分配属性的顺序敏感时,ISupportInitialize
是您需要的接口。没有任何方法可以影响设计师分配它们的顺序,它按字母顺序排列。
您通常在BeginInit()
方法中将 bool 变量设置为true,您可以在属性设置器中对此进行测试,并在设置时不执行任何操作。然后,您的EndInit()
方法会使属性值生效。
您可以在ErrorProvider component中看到一个很好的例子。请注意它如何使用这些方法来推迟数据绑定。 PictureBox control是另一个很好的例子,它用它来推迟图像下载。 TrackBar是另一个示例,它使用它来确保Value
属性介于最小值和最大值之间。 Etcetera,.NET Framework源代码通常是查看.NET类型在实践中如何使用的好地方。
答案 1 :(得分:0)
根据定义,Designer允许在可视模式下创建控件,然后由Visual Studio生成用于初始化控件的相应代码。
初始化在一个地方完成,以避免代码中的任何空引用问题。您希望在使用其引用时确实已经创建了所有控件。
如果您想基于特定的构造函数动态创建接口,则可以完美地创建控件初始化。