2011-05-18 56 views
1

我正在嘗試設置一個System.Web.UI.Control對象的ID字段。該控件實現了一個接口IChartControl,它沒有ID屬性。我想檢索控件作爲IChartControl並設置它的ID字段。設置控件界面隱藏的屬性

我應該這樣做?:

IChartControl chartControl = foo.GetChartControl(); 
(chartControl as Control).ID = foo.GetID(); 
chartControl.Bar(); 

,或者它也同樣有權添加一個新的屬性,以IChartControl名爲「ID」,這樣,當我設定的ID字段它設置控件的ID字段。

+0

如果你這樣的演員,你會得到一個空引用異常,如果觸摸wood,'chartControl'不是'Control'。只是在說'。 – BoltClock 2011-05-18 19:19:43

回答

2

您確實需要將對象轉換爲具有要設置成員的類型,就像您在代碼示例中一樣。

ID屬性添加到IChartControl將會起作用,但只有在該接口的上下文中有意義時才能使用。這確實可以讓你設置ID屬性而不需要劇組。

只要接口中的IDControl是相同的,你應該沒問題。如果您嘗試使用explicit interface implementations,您可能會遇到麻煩。

+1

它爲什麼會發生衝突?只要簽名匹配,將IChartControl添加到派生自Control的類就可以使其ID成員「自動」實現。 – dlev 2011-05-18 19:20:31

+0

@dlev - 你說得很對。我正在考慮明確的接口實現,這取決於類如何實現可能會有令人驚訝的結果。 – Oded 2011-05-18 19:25:42

+0

非常真實。試圖編輯我的評論以迴應你的編輯,但顯然你只能編輯評論5分鐘。現在我只是看起來很傻! – dlev 2011-05-18 19:27:13

1

如果您覺得所有IChartControl實現應支持檢索ID值,則只應將ID字段添加到IChartControl。如果是這種情況,那麼添加它是有道理的。如果不是,那麼as聲明是好的(雖然冒險,因爲GetChartControl()只保證一個對象可能或不可能有一個ID,可能或不可能是一個控制)。

相關問題