如何编写从接口到另一种类型的隐式转换?

| 我正在尝试执行以下操作:
public class SomeWrapper : ISomeWrapper{

  public static implicit operator ActualRec(ISomeWrapper someWrapper)
        {
            return ((SomeWrapper)someWrapper).SomeInfo;
        }
}
但是这段代码失败,说: \“参数或返回类型必须为SomeWrapper类型”。 我了解编译说明的问题。但是我需要这种类型的转换b,因为在我的整个应用程序中,我都使用ISomeWrapper作为变量,存储SomeWrapper实例。 (此外,SomeWrapper是唯一实现ISomeWrapper的类)。 如果ISomeWrapper接口连接到我在具体类中知道的类型,有什么方法可以进行隐式转换? 编辑: 正如所有人所建议的那样,在C#中无法从接口进行隐式强制转换。 我需要这样做的原因?我想允许(隐式地)允许ISomeWrapper的用户调用需要ActualRec作为参数的方法,而又不授予ISomeWrapper的用户访问ActualRec的方法/属性的权限。 例如, 如果我在ISomeWrapper中包含了ActualRec属性,则ISomeWrapper的用户将能够调用ActualRec中可用的方法(例如,someWrapper.ActualRec.Dispose()),我不想公开该方法。 这就是尝试查找隐式转换的原因。 另外,我不想跨应用程序使用SomeWrapper。 请提出是否有一些概念/模式来完成这项工作。 感谢您的关注。     
已邀请:
我会说您的设计存在缺陷。您正在从接口转换为具体类型,这使得对该接口的使用变得毫无意义。该接口是一个合同,实现类型将通过该合同来实现提供所需的服务集。在您的示例中,接口(合同)中未定义“ 1”属性吗?如果不是,您为什么要尝试使用该接口进行投射?您应该将“ 2”用作输入参数本身。     
这在C#中受到限制。参见下文。 http://msdn.microsoft.com/zh-CN/library/aa664464%28VS.71%29.aspx   如果满足以下所有条件,则允许类或结构声明从源类型S到目标类型T的转换:      ...      S和T都不是对象或接口类型。 也,   用户定义的转换不允许在接口类型之间进行转换。           特别是,此限制可确保不会发生用户定义的转换       转换为接口类型时,并且成功转换为接口类型       仅当要转换的对象实际实现指定的接口类型时。     
C#不允许这样做,因为这样的功能很容易导致无法阅读的代码使其他开发人员眼花azz乱。尝试改用扩展方法:
public static class SomeWrapperExtensions
{
    public static ActualRec ToActualRec(
        this ISomeWrapper wrapper)
    {
        return ((SomeWrapper)someWrapper).SomeInfo;
    }
}
这使您能够以不会让其他开发人员感到惊讶的方式来执行约定:
ActualRec rec = wrapper.ToActualRec();
请注意,这仍然很脆弱,因为您不知道
ISomeWrapper
是否实际代表
SomeWrapper
实现。     

要回复问题请先登录注册