编程语言
首页 > 编程语言> > c# – 如何将接口的隐式转换写入另一种类型?

c# – 如何将接口的隐式转换写入另一种类型?

作者:互联网

我想尝试做类似下面的事情:

public class SomeWrapper : ISomeWrapper{

  public static implicit operator ActualRec(ISomeWrapper someWrapper)
        {
            return ((SomeWrapper)someWrapper).SomeInfo;
        }
}

但是这段代码失败了,说:
“参数或返回类型必须是SomeWrapper类型”.

我理解编译正在陈述的问题.但是我需要这种类型的转换,因为在我的应用程序中我使用ISomeWrapper作为变量,存储SomeWrapper实例. (另外,SomeWrapper是唯一实现ISomeWrapper的类).

如果ISomeWrapper接口到我在具体类中知道的类型,有没有办法进行隐式转换?

编辑:
正如所有人所建议的那样,在C#中无法从接口隐式转换.

我需要这样做的原因?我想(隐式地)允许ISomeWrapper的用户调用需要ActualRec作为参数的方法WITHOUT允许访问ISomeWrapper的用户来调用ActualRec的方法/属性.

例如,
如果我包括ISomeWrapper属性ActualRec然后ISomeWrapper的用户将能够调用方法提供ActualRec(喂,someWrapper.ActualRec.Dispose()),我不希望公开.

这就是试图找到一些隐式转换的原因.

另外,我不希望跨应用程序使用SomeWrapper.

请建议是否有一些概念/模式来完成这项工作.

谢谢你的关注.

解决方法:

我想说你的设计有一个缺陷.您正在从界面转换为具体类型,这使得界面的使用毫无意义.接口是一个合同,通过该合同,实现类型将符合提供所需的一组服务.在您的示例中,SomeInfo属性是否未在接口(合同)中定义?如果没有,你为什么要尝试使用界面?您应该使用SomeWrapper作为输入参数本身.

标签:c,casting,implicit-conversion
来源: https://codeday.me/bug/20190714/1456326.html