低垂考慮下面的代碼:如何強制仿製藥
class Animal
{ }
class Dog : Animal
{ }
class Cage<T>
{
private T animal;
public Cage(T animal)
{
this.animal = animal;
}
public T Animal
{
get { return animal;}
}
}
class Program
{
static void Main(string[] args)
{
Dog dog = new Dog();
Cage<Animal> animalCage = new Cage<Animal>(dog);
Cage<Dog> dogCage = (Cage<Dog>)animalCage;
}
}
我怎樣才能解決辦法,最後編譯器錯誤(轉換從animalCage到dogCage)?
在我的代碼我知道籠子裏有一隻狗,但我無法找到一個方法來施展它。是我創建一個轉換器並創建一個新的Cage <Dog>實例的一個例子Cage <Animal>?
您可能知道籠子包含一隻狗,但* type system *沒有。由於泛型參數在編譯過程中被刪除,Java泛型會讓您發出警告,但CLR泛型會保留在運行時。 –
你是對的......我的問題是,如果有一個特殊的聲明(或c#關鍵字)告訴編譯器「推我」:) – user1778378
沒有這樣的運氣 - 沒有辦法在運行時關閉CLR通用類型強制。 –