2011-09-07 212 views
1

可能重复:
C#: implicit operator and extension methodsc#是否可以使用扩展方法来实现隐式转换?

我有一个共同的库项目定义多种类型(没有什么太复杂,只是性质为主)。两个项目引用这个公共库:一个客户端应用程序和一个web服务。

我的意图是让web服务返回类型T,然后在客户端应用程序中使用T.通常我不得不再次将Web服务返回的类型转换为T(因为代理类,T返回为WebService.T),但我希望使用implicit conversion来代替。

由于原始的Common类没有Web服务代理类的知识,我想知道是否可以使用extension methods来实现隐式转换。有点像

public static implicit operator MyObject(this MyProxyObject value) 
    { 
     //stuff 
    } 

这是编译器根本不喜欢的东西。

这样的事情甚至可能吗?

更新

好吧,首先,我有2.0框架引用,这样解释我的编译器的问题。

其次,我可以通过创建一个方法扩展“ToModel”(或其他)来实现转换。所以就业务目标而言,我可以通过调用WebService.T.ToModel()来轻松转换我的类型。

虽然我怀疑这可以使用隐式转换(或其值得的麻烦)。

回答

0

没有必要使用扩展方法。你应该能够删除this,它应该编译。或者将它作为explicit转换可能更有意义。

+0

要明确,隐式转换不是在类T中声明,而是在WebServiceManager上声明。所以封闭类型(静态方法所在的类)不是T类型,而是类型WebServiceManager,因为我不想在T的声明中执行转换(因为它不应该具有Webservice.T代理类的知识)。 – MoSlo

1

如果您的Web服务是WCF服务而不是传统的ASMX服务,那么您可以在客户端配置服务引用以'在引用的程序集中重用类型'。这将导致客户端使用公共库中的类型,而不是客户端上的自动生成代理类。

+0

不幸的是,这项要求是传统的ASMX服务。 :\但你的方法很好听。 – MoSlo

相关问题