2011-10-18 30 views
0

對於易混淆的標題感到抱歉。 我對Spreads使用第三方控件,它有一個comboBoxCellType()。 在我的代碼有喜歡的20個地方,我有這樣的代碼:找到將財產應用於代碼的最佳方式

ComboBoxCellType cbo = new ComboBoxCellType() 
cbo.OtherStuff... 

現在我想這樣的代碼的所有出現次數有所謂的額外的屬性listwidth = 0;所以 類似:

ComboBoxCellType cbo = new ComboBoxCellType() 
cbo.listwidth=0; 
cbo.OtherStuff 

一個辦法就是搜索代碼和手動添加。但我想知道是否有更好的方法使用繼承和重寫來做到這一點?

回答

1

您可以創建一個靜態類,用於新建ComboBoxCellType。

事情是這樣的:

public static class ComboBoxCellTypeFactory 
{ 
    public static ComboBoxCellType Create() 
    { 
     return new ComboBoxCellType(){listwidth = 0}; 
    } 
} 

有了這個,你可以用listwidth屬性設置爲0喜歡這個新達ComboBoxCellType實例:

ComboBoxCellType cbo = ComboBoxCellTypeFactory.Create(); 
cbo.OtherStuff... 
+0

然後,您可以使用ComboBoxCellType cbo = ComboBoxCellTypeFactory.Create()來搜索/替換'ComboBoxCellType cbo = new ComboBoxCellType();'的實例。 –

+0

謝謝,我現在就試試吧...... – Bohn

+0

嗯..這個編譯錯誤是什麼? 「靜態類'MyApplication.ComboBoxCellTypeFactor'不能從類型'FarPoint.Win.Spread.CellType.ComboBoxCellType'派生,靜態類必須從對象派生。」 – Bohn

1

將一個ComboBoxCellType的創建和初始化封裝到一個方法中,並從以前執行此操作的每個位置調用該方法。

一般來說,如果您發現自己重複了代碼,請參閱是否可以將代碼提取到可以調用的方法中。保持您的代碼DRY

喜歡的東西:

private ComboBoxCellType BuildComboBoxCellType() 
{ 
    ComboBoxCellType cbo = new ComboBoxCellType() 
    cbo.listwidth=0; 
    cbo.OtherStuff... 

    return cbo; 
} 

而在你的原始代碼:

ComboBoxCellType cbo = BuildComboBoxCellType(); 
+0

嗯,聽起來不錯。你能給我看一些代碼示例,我可以明白嗎?謝謝 – Bohn

+0

ohok,謝謝...以及cbo.OtherStuff在代碼的不同位置上有很大不同。這不是我能做到的。所以唯一常見的事情是cbo.listwidth = 0; ...在這種情況下,我仍然觸摸代碼的所有位置來應用這個新的BuildComboBoxCellType()...這又像是在需要的地方編寫cbo.listwidth = 0。繼承在這種情況下不起作用? – Bohn

+0

@BDotA - 根據「OtherStuff」是什麼,您可以使用'Func '或'Action '委託人將其分解出來。 – Oded

0

如果你有機會獲得源代碼,我建議把一個this.listwidth = 0的構造你的ComboBoxCellType。

+0

我不知道。這是一個商業控制。 (Farpoint Spread。) – Bohn