低垂考虑下面的代码:如何强制仿制药
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通用类型强制。 –