2009-09-18 80 views
0
// The Structure of the Container and the items 
public interface IContainer <TItem> where TItem : IItem 
{ 

} 

public class AContainer : IContainer<ItemA> 
{ 

} 

public interface IItem 
{ 

} 

public class ItemA : IItem 
{ 

} 

// Client app 

[Test] 
public void Test() 
{ 
IContainer<IItem> container = new AContainer(); 
} 

問題:在測試中發生以下錯誤。什麼可以成爲鑄造的解決方案?明確鑄造問題

不能將類型'AContainer'隱式轉換爲'IContainer'。一個顯式轉換存在(是否缺少強制轉換?)

+1

這個問題似乎要拿出大部分時間。發帖前是否搜索過? – thecoop 2009-09-18 09:10:28

回答

3

另一個泛型協變問題...

泛型類型在.NET不是協變或逆變 - 的IContainer <意達>(這是的aContainer是什麼)是不是IContainer的子類<IItem> - 兩者之間沒有有效的轉換。這將是固定在C#4

+3

我注意到,在C#4中,我們添加了協變和反變量**,但**僅在接口和委託中使用不同位置的引用類型參數,並且只有那些在編譯時已知的接口和委託對變量安全。 – 2009-09-18 14:59:18

1

如果你想使用AContainer是一個IContainer<IItem>,你需要實現這個接口,以及:

public class AContainer : IContainer<ItemA>, IContainer<IItem> 

您可以明確地實現它。