Man*_*ani 3 c# casting implicit-conversion
我想尝试做类似下面的事情:
public class SomeWrapper : ISomeWrapper{
public static implicit operator ActualRec(ISomeWrapper someWrapper)
{
return ((SomeWrapper)someWrapper).SomeInfo;
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码失败了,说:"参数或返回类型必须是SomeWrapper类型".
我理解编译正在陈述的问题.但是我需要这种类型的转换,因为在我的应用程序中我使用ISomeWrapper作为变量,存储SomeWrapper实例.(另外,SomeWrapper是唯一实现ISomeWrapper的类).
如果ISomeWrapper接口到我在具体类中知道的类型,有没有办法进行隐式转换?
编辑:正如所有人所建议的那样,在C#中无法从接口进行隐式转换.
我需要这样做的原因?我想(隐式地)允许ISomeWrapper的用户调用需要ActualRec作为参数的方法WITHOUT允许访问ISomeWrapper的用户来调用ActualRec的方法/属性.
例如,如果我在ISomeWrapper中包含属性ActualRec,那么ISomeWrapper的用户将能够调用ActualRec中可用的方法(Say,someWrapper.ActualRec.Dispose()),我不想公开这些方法.
这就是试图找到一些隐式转换的原因.
另外,我不希望跨应用程序使用SomeWrapper.
请建议是否有一些概念/模式来完成这项工作.
谢谢你的关注.
这在C#中受到限制.参见下文.
http://msdn.microsoft.com/en-us/library/aa664464%28VS.71%29.aspx
如果满足以下所有条件,则允许类或结构声明从源类型S到目标类型T的转换:
...
S和T都不是对象或接口类型.
也,
不允许用户定义的转换从接口类型转换或转换为接口类型.特别是,此限制确保在转换为接口类型时不会发生用户定义的转换,并且只有在转换的对象实际实现指定的接口类型时,才能成功转换为接口类型.
我想说你的设计有一个缺陷.您正在从界面转换为具体类型,这使得界面的使用毫无意义.接口是一个合同,通过该合同,实现类型将符合提供所需的一组服务.在您的示例中,SomeInfo属性是否未在接口(合同)中定义?如果没有,你为什么要尝试使用界面?您应该将其SomeWrapper用作输入参数本身.
| 归档时间: |
|
| 查看次数: |
5801 次 |
| 最近记录: |