背景:
讓我們假設我有下面的類:爲什麼C#中的隱式類型轉換失敗?
class Wrapped<T> : IDisposable
{
public Wrapped(T obj) { /* ... */ }
public static implicit operator Wrapped<T>(T obj)
{
return new Wrapped<T>(obj);
}
public void Dispose() { /* ... */ }
}
正如你所看到的,它提供了T
→ Wrapped<T>
的隱式類型轉換操作符。最終,我想能夠使用這個類,如下所示:
interface IX { /* ... */ }
class X : IX { /* ... */ }
...
IX plainIX = new X();
using (Wrapped<IX> wrappedIX = plainIX)
{
/* ... */
}
問題:
然而,上述using
子句中的類型轉換失敗。雖然我可以將new X()
直接指定給wrappedIX
,但我不能將IX
類型的任何內容指定給它。編譯器會報錯以下錯誤:
Compiler error CS0266: Cannot implicitly convert type 'IX' to 'Wrapped<IX>'. An explicit onversion exists (are you missing a cast?)
我不明白這一點。這裏有什麼問題?
compilable if if replace「IX plainIX = new X();」用「X plainIX = new X();」 – Nagg 2010-03-26 19:29:01
@Nagg:因爲我想實現的目標(即在現有的* COM庫*上設計一個流暢的接口),所以對接口進行編程是絕對必要的。因此,不幸的是,你的建議不是一個可行的選擇。 – stakx 2010-03-26 19:42:30