C# 设置控件隐藏的属性';s接口

C# 设置控件隐藏的属性';s接口,c#,interface,casting,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”的新属性添加到IChart

我正在尝试设置System.Web.UI.Control对象的ID字段。该控件实现了一个接口IChartControl,该接口没有ID属性。我想将该控件检索为IChartControl并设置其ID字段

我应该这样做吗

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

或者将一个名为“ID”的新属性添加到IChartControl中,这样当我设置ID字段时,它会设置控件的ID字段,这同样正确。

您确实需要将对象强制转换为具有要设置的成员的类型,就像您在代码示例中所做的那样

ID
属性添加到
IChartControl
将起作用,但只有在该接口的上下文中有意义的情况下才能这样做。这确实允许您在不需要强制转换的情况下设置
ID
属性


只要界面中的
ID
控件中的
ID
是相同的,就可以了。如果您尝试使用,您可能会遇到麻烦。

如果您觉得所有
IChartControl
实现都应该支持检索ID值,则只应在
IChartControl
中添加ID字段。如果是这样的话,那么添加它是有意义的。如果不是,那么
as
语句就可以了(尽管有风险,因为
GetChartControl()
只保证对象可能有ID,也可能没有ID,也可能不是控件。)

如果像这样强制转换,如果触摸wood,
chartControl
不是
控件,则会出现空引用异常。只是说,为什么会有冲突?只要签名匹配,将IChartControl添加到从Control派生的类中只会“自动”实现其ID成员。@dlev-你说得很对。我在考虑显式接口实现,这取决于类的实现方式,可能会产生令人惊讶的结果。非常正确。尝试编辑我的评论以回应您的编辑,但显然您只能编辑评论5分钟。现在我看起来很傻@dlev-人们仍然可以看到我的编辑,时不时地装傻也没什么不对;)