比方說,我有以下型號:您是否可以使用List <T>滿足IEnumerable <T>的接口?
public interface IProduct
{
IEnumerable<Ingredient> Ingredients { get; set; }
}
public class Product : IProduct
{
public IEnumerable<Ingredient> Ingredients { get; set; }
}
public class Ingredient
{
}
但我想Ingredients
成爲List<Ingredient>
代替IEnumerable<Ingredient>
是有辦法的接口模型接受IEnumerable<T>
和List<T>
?
我嘗試了以下。但是,當然,語法不支持這一點,並且沒有看到TEnumerable<Ingredient>
作爲通用參數。
public interface IProduct<TEnumerable<Ingredient>>
where TEnumerable<Ingredient> : IEnumerable<Ingredient>
{
TEnumerable<Ingredient> Ingredients { get; set; }
}
public class Product : IProduct
{
public List<Ingredient> Ingredients { get; set; }
}
public class Ingredient
{
}
我意識到這不是很實際,但我只是看着這個好奇心而已。
記住LSP。你不能直接這樣做的原因是你不能說,調用'new Product()。Ingredients = Enumerable.Empty()'。即該子類將違反其接口說'(新產品()爲IProduct).Ingredients = Enumerable.Empty ()'應該是有效的。 –
millimoose