2011-09-07 46 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

相關問題