2011-08-26 132 views
3

可能重複:
polymorphic resolution of generic parameters in Unity registerType鑄造泛型

這可能是顯而易見的。但有人可以告訴我爲什麼這不是有效的代碼?編譯器說它不能將Class1<string>轉換爲Class1<object>。 這種方式是否是仿製藥不允許的上傳?如果是這樣,爲什麼不呢?

namespace Test 
{ 
    public class Tests 
    { 
     public void Test() 
     {    
      Class1<object> objectClass1 = new Class1<string>(); 
     } 
    } 
    class Class1<T> 
    { 
    } 
} 
+6

這是一個常見問題,尋找協方差。這裏是關於這個主題的一個線程:http://stackoverflow.com/questions/2662369/covariance-and-contravariance-real-world-example – JohnD

+1

另請參見[我對類似問題的回答](http://stackoverflow.com/questions/4269279/polymorphic-resolution-of-generic-parameters-in-unity-registertype/4269376#4269376)解釋爲什麼*這是不允許的。 – cdhowie

回答

-5

String,Int32等是Struct類型,而object,Person等是C#的類對象。 因此,當您創建泛型時,如果您打算使用鑄造特徵,則必須指定一個約束。 所以,你可以使用

public void Method<T>() where T : class 
or 
public void Method<T>() where T : struct 
+0

這與問題完全無關。 – Gabe