说,我有一个界面
public interface ISomeControl
{
Control MyControl { get; }
...
}
是否可以定义这样的内容:
public static implicit operator Control(ISomeControl ctrl)
{
return ctrl.MyControl;
}
或者说为什么我不能在C#中这样做?
答案 0 :(得分:6)
如果您有Control
的子类,并且该子类实现了ISomeControl
接口,那该怎么办。
class SomeControl : Control, ISomeControl {}
现在演员阵容不明确 - 内置向上播放和用户定义的转换。因此,您无法为接口提供用户定义的转换。
答案 1 :(得分:1)
你做不到。
C#规范说:
6.4.1允许的用户定义转化
C#仅允许声明某些用户定义的转换。在 特别是,不可能重新定义已经存在的 隐式或显式转换。对于给定的源类型S和目标 类型T,如果S或T是可空类型,让S0和T0引用它们 基础类型,否则S0和T0等于S和T. 分别。允许类或结构声明转换 仅在以下所有情况下,从源类型S到目标类型T. 是的:
S0和T0是不同的类型。
S0或T0是发生运算符声明的类或结构类型。
S0和T0都不是接口类型。
不包括用户定义的转化,从S到T或从T到S都不存在转换。
你可以做的一种方法是使用静态方法。
public class Control
{
public static Control FromISomeControl(ISomeControl ctrl)
{
return ctrl.MyControl;
}
}