第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C#中帶有參數(shù)的“ UserControl”構(gòu)造函數(shù)

C#中帶有參數(shù)的“ UserControl”構(gòu)造函數(shù)

莫回?zé)o 2019-11-27 14:13:14
叫我瘋了,但我是那種喜歡帶參數(shù)的構(gòu)造函數(shù)(如果需要)的人,而不是沒有參數(shù)后再設(shè)置屬性的構(gòu)造函數(shù)。我的思考過程:如果需要屬性來實(shí)際構(gòu)造對象,則應(yīng)將其放入構(gòu)造函數(shù)中。我有兩個優(yōu)點(diǎn):我知道在構(gòu)造對象時(shí)(沒有錯誤/異常),我的對象很好。它有助于避免忘記設(shè)置某些屬性。在表單/用戶控件開發(fā)方面,這種心態(tài)開始傷害我。想象一下UserControl:public partial class MyUserControl : UserControl{  public MyUserControl(int parm1, string parm2)  {    // We'll do something with the parms, I promise    InitializeComponent();  }}在設(shè)計(jì)時(shí),如果將其UserControl放在表單上,則會得到Exception:無法創(chuàng)建組件'MyUserControl'...System.MissingMethodException-沒有為此對象定義無參數(shù)構(gòu)造函數(shù)。在我看來,唯一的解決方法是添加默認(rèn)構(gòu)造函數(shù)(除非其他人知道一種方法)。public partial class MyUserControl : UserControl{  public MyUserControl()  {    InitializeComponent();  }  public MyUserControl(int parm1, string parm2)  {    // We'll do something with the parms, I promise    InitializeComponent();  }}不包括無參數(shù)構(gòu)造函數(shù)的全部目的是避免使用它。而且我什DesignMode至不能使用該屬性來做類似的事情:public partial class MyUserControl : UserControl{  public MyUserControl()  {    if (this.DesignMode)    {      InitializeComponent();      return;    }    throw new Exception("Use constructor with parameters");  }}這也不起作用:if (LicenseManager.UsageMode == LicenseUsageMode.Designtime)很好,繼續(xù)前進(jìn)...我有我的無參數(shù)構(gòu)造函數(shù),可以將其放在表單上,表單的形式InitializeComponent如下:private void InitializeComponent(){  this.myControl1 = new MyControl();  // blah, blah}并相信我,因?yàn)槲易龅搅耍ㄊ堑?,忽略了Visual Studio生成的注釋),我嘗試弄亂了,然后將參數(shù)傳遞給,InitializeComponent以便可以將它們傳遞給的構(gòu)造函數(shù)MyControl。這導(dǎo)致我這樣:public MyForm(){  InitializeComponent(); // Constructed once with no parameters  // Constructed a second time, what I really want  this.myControl1 = new MyControl(anInt, aString);  }對于UserControl要在構(gòu)造函數(shù)中使用with參數(shù)的情況,我必須添加第二個不需要的構(gòu)造函數(shù)?并實(shí)例化控件兩次?我覺得我一定做錯了。有什么想法嗎?意見?保證(希望)?
查看完整描述

3 回答

?
互換的青春

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超6個贊

有關(guān)Windows窗體工作方式的設(shè)計(jì)決策或多或少排除了Windows窗體組件的參數(shù)化.ctors。您可以使用它們,但是當(dāng)您這樣做時(shí),便會超出公認(rèn)的機(jī)制。而是Windows窗體更喜歡通過屬性初始化值。如果未廣泛使用,這是一種有效的設(shè)計(jì)技術(shù)。

不過,這有一些好處。

  1. 易于客戶使用。客戶端代碼不需要跟蹤一堆數(shù)據(jù),它可以立即創(chuàng)建某些內(nèi)容,并以有意義(如果不感興趣)的結(jié)果來查看它。

  2. 設(shè)計(jì)者易于使用。通常,設(shè)計(jì)器代碼更清晰,更易于解析。

  3. 阻止單個組件中異常的數(shù)據(jù)依賴關(guān)系。(盡管甚至Microsoft都用吹滅了它SplitContainer

表單中也有很多支持,可以與設(shè)計(jì)師一起使用此技術(shù)。,和這樣的東西DefaultValueAttribute,使您有機(jī)會以最小的努力提供豐富的客戶體驗(yàn)。DesignerSerializationVisibilityAttributeBrowsableAttribute

(這并不是在Windows窗體中為客戶體驗(yàn)做出的唯一折衷。抽象基類組件也可能變得毛茸茸。)

我建議堅(jiān)持使用無參數(shù)構(gòu)造函數(shù),并在Windows窗體設(shè)計(jì)原則中進(jìn)行工作。如果UserControl必須執(zhí)行一些實(shí)際的先決條件,則將它們封裝在另一個類中,然后通過一個屬性將該類的實(shí)例分配給您的控件。這也將更好地分離關(guān)注點(diǎn)。


查看完整回答
反對 回復(fù) 2019-11-27
?
寶慕林4294392

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個贊

不幸的是,這是一個經(jīng)常發(fā)生的設(shè)計(jì)問題,而不僅僅是控制空間。

在很多情況下,即使無參構(gòu)造函數(shù)不是理想的,您也需要有無參構(gòu)造函數(shù)。例如,如果沒有無參數(shù)構(gòu)造函數(shù),則許多值類型IMO會更好,但是創(chuàng)建一個可以那樣工作的類型是不可能的。

在這些情況下,您僅需以最佳方式設(shè)計(jì)控件/組件。使用合理的(最好是最常用的)默認(rèn)參數(shù)可以極大地幫助您,因?yàn)槟辽伲ㄏM┛梢允褂昧己玫闹党跏蓟M件。

另外,嘗試以某種方式設(shè)計(jì)組件,以便在生成組件后可以更改這些屬性。使用Windows Forms組件通常很好,因?yàn)樵诎踩虞d時(shí)間之前,您幾乎可以做任何事情。

再次,我同意-這不是理想的選擇,但這只是我們必須與之共處和解決的問題。


查看完整回答
反對 回復(fù) 2019-11-27
  • 3 回答
  • 0 關(guān)注
  • 963 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號