3 回答

TA貢獻1797條經驗 獲得超6個贊
有關Windows窗體工作方式的設計決策或多或少排除了Windows窗體組件的參數化.ctors。您可以使用它們,但是當您這樣做時,便會超出公認的機制。而是Windows窗體更喜歡通過屬性初始化值。如果未廣泛使用,這是一種有效的設計技術。
不過,這有一些好處。
易于客戶使用。客戶端代碼不需要跟蹤一堆數據,它可以立即創建某些內容,并以有意義(如果不感興趣)的結果來查看它。
設計者易于使用。通常,設計器代碼更清晰,更易于解析。
阻止單個組件中異常的數據依賴關系。(盡管甚至Microsoft都用吹滅了它
SplitContainer
)
表單中也有很多支持,可以與設計師一起使用此技術。,和這樣的東西DefaultValueAttribute
,使您有機會以最小的努力提供豐富的客戶體驗。DesignerSerializationVisibilityAttribute
BrowsableAttribute
(這并不是在Windows窗體中為客戶體驗做出的唯一折衷。抽象基類組件也可能變得毛茸茸。)
我建議堅持使用無參數構造函數,并在Windows窗體設計原則中進行工作。如果UserControl
必須執行一些實際的先決條件,則將它們封裝在另一個類中,然后通過一個屬性將該類的實例分配給您的控件。這也將更好地分離關注點。

TA貢獻2021條經驗 獲得超8個贊
不幸的是,這是一個經常發生的設計問題,而不僅僅是控制空間。
在很多情況下,即使無參構造函數不是理想的,您也需要有無參構造函數。例如,如果沒有無參數構造函數,則許多值類型IMO會更好,但是創建一個可以那樣工作的類型是不可能的。
在這些情況下,您僅需以最佳方式設計控件/組件。使用合理的(最好是最常用的)默認參數可以極大地幫助您,因為您至少(希望)可以使用良好的值初始化組件。
另外,嘗試以某種方式設計組件,以便在生成組件后可以更改這些屬性。使用Windows Forms組件通常很好,因為在安全加載時間之前,您幾乎可以做任何事情。
再次,我同意-這不是理想的選擇,但這只是我們必須與之共處和解決的問題。
- 3 回答
- 0 關注
- 960 瀏覽
添加回答
舉報