我试图做类似如下:如何编写从接口到另一种类型的隐式转换?
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。
请建议是否有一些概念/模式来完成这项工作。
感谢您的关注。
“SomeWrapper是唯一实现ISomeWrapper的类” - 即挥动着一个大红旗,上面写着“糟糕的代码味道”。如果只有一个类实现接口,那么接口的值是多少?随处使用课程。 – 2011-04-21 15:57:28
@Eric:这不是没有意义的,因为我使用这个接口进行单元测试。 – 2011-04-22 12:33:21