簡體   English   中英

使用c#中的模板進行分配

[英]Assignments using templates in c#

public class Animal
{

}
public class Cat : Animal
{

}

public class AnimalBag<T> where T : Animal
{

} 

...
AnimalBag<Animal> bag = new AnimalBag<Cat>();

我收到此錯誤:

無法將類型AnimalBag<Cat>隱式轉換為“AnimalBag”

如果我試試這個:

AnimalBag<Animal> bag = (AnimalBag<Animal>) new AnimalBag<Cat>();

無法將AnimalBag<Cat>類型轉換為AnimalBag<Animal>

如何在C#中解決此類問題? 這在Java中非常有效。

聲明AnimalBag<Animal> bag說明包將能夠存儲任何類型的動物 賦值= new AnimalBag<Cat>(); 與此相矛盾的是,它實際上只能存儲 這是什么,因為它不可能兩者兼而有之?

這種情況是co-variant發揮作用的地方,但是co-variant不適用於 ,只有接口委托 ,所以你需要使用out關鍵字為co-variant定義interface

public interface IAnimalBag<out T> where T : Animal
{
}

public class AnimalBag<T> : IAnimalBag<T> where T: Animal
{
}

然后你可以分配:

IAnimalBag<Animal> bag = new AnimalBag<Cat>();

您可以在泛型中檢查更多的協方差和反差

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM