2011-05-18 55 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,可能或不可能是一个控制)。

相关问题