バックグラウンド:
次のクラスがあるとします。
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
。コンパイラは次のエラーで文句を言います:
コンパイラ エラー CS0266: 型 'IX' を 'Wrapped<IX>' に暗黙的に変換することはできません。明示的な反転が存在します (キャストがありませんか?)
私はこれを理解していません。ここで何が問題なのですか?