设置由控件界面隐藏的属性

时间:2011-05-18 19:15:04

标签: c# interface casting

我正在尝试设置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字段。

2 个答案:

答案 0 :(得分:2)

您需要将对象强制转换为包含您要设置的成员的类型,就像在代码示例中一样。

ID属性添加到IChartControl将起作用,但只有在此接口的上下文中有意义时才会这样做。这确实允许您设置ID属性而无需演员。

只要界面中的IDControl中的{{1}}相同,您就可以了。如果您尝试使用explicit interface implementations,可能会遇到麻烦。

答案 1 :(得分:1)

如果您认为所有IChartControl实施都应支持检索ID值,则只应向IChartControl添加ID字段。如果是这种情况,那么添加它是有道理的。如果没有,那么as语句就可以了(虽然有风险,因为GetChartControl()只能保证一个可能有也可能没有ID的对象,并且可能是也可能不是Control。)