我正在尝试设置System.Web.UI.Control对象的ID字段。该控件实现了一个接口IChartControl,它没有ID属性。我想将控件检索为IChartControl并设置其ID字段。
我应该这样做吗?:
IChartControl chartControl = foo.GetChartControl();
(chartControl as Control).ID = foo.GetID();
chartControl.Bar();
或者将新属性添加到名为“ID”的IChartControl中同样正确,这样当我设置ID字段时,它会设置Control的ID字段。
答案 0 :(得分:2)
您需要将对象强制转换为包含您要设置的成员的类型,就像在代码示例中一样。
将ID
属性添加到IChartControl
将起作用,但只有在此接口的上下文中有意义时才会这样做。这确实允许您设置ID
属性而无需演员。
只要界面中的ID
和Control
中的{{1}}相同,您就可以了。如果您尝试使用explicit interface implementations,可能会遇到麻烦。
答案 1 :(得分:1)
如果您认为所有IChartControl
实施都应支持检索ID值,则只应向IChartControl
添加ID字段。如果是这种情况,那么添加它是有道理的。如果没有,那么as
语句就可以了(虽然有风险,因为GetChartControl()
只能保证一个可能有也可能没有ID的对象,并且可能是也可能不是Control。)