C#在接口作为约束类型的情况下使用通用方法。
示例
这是有关如何在动物类的Eat方法中使用通用类型TFood的示例
public interface IFood
{
void EatenBy(Animal animal);
}
public class Grass: IFood
{
public void EatenBy(Animal animal)
{
Console.WriteLine("Grass was eaten by: {0}", animal.Name);
}
}
public class Animal
{
public string Name { get; set; }
public void Eat<TFood>(TFood food)
where TFood : IFood
{
food.EatenBy(this);
}
}
public class Carnivore : Animal
{
public Carnivore()
{
Name = "Carnivore";
}
}
public class Herbivore : Animal, IFood
{
public Herbivore()
{
Name = "Herbivore";
}
public void EatenBy(Animal animal)
{
Console.WriteLine("Herbivore was eaten by: {0}", animal.Name);
}
}您可以这样调用Eat方法:
var grass = new Grass();
var sheep = new Herbivore();
var lion = new Carnivore();
sheep.Eat(grass);
//产出:草食者:草食动物
lion.Eat(sheep);
//产出:食草动物被食肉动物食用在这种情况下,如果您尝试致电:
sheep.Eat(lion);
这将是不可能的,因为对象狮子没有实现IFood接口。尝试进行上述调用将生成编译器错误:“类型'Carnivore'不能用作通用类型或方法''中的类型参数'TFood'。没有从'Carnivore'到'IFood'的隐式引用转换。。”Animal.Eat(TFood)
热门推荐
6 保研的祝福语简短
10 年轻20岁祝福语简短
11 朋友结婚祝福语信息简短
12 女孩婚礼贺卡祝福语简短
13 30段点歌简短祝福语
14 虎年春节祝福语图文简短
15 写给后妈祝福语大全简短
16 简短回复生日祝福语
17 校长送毕业祝福语简短
18 毕业立体贺卡祝福语简短