首先设计界面:
编写代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace 泛型类高级应用
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
label1.Text = "";
}
Pet<Animal> myPet = new Pet<Animal>();
//添加狗
private void button1_Click(object sender, EventArgs e)
{
myPet.Animals.Add(new Dog(textBox1 .Text));
label1.Text = string.Format ("\n添加Dog:{0}成功",textBox1 .Text );
textBox1.Text = "";
}
//添加小狗
private void button2_Click(object sender, EventArgs e)
{
myPet.Animals.Add(new SmallDog(textBox1 .Text ));
label1.Text = string.Format("\n添加SmallDog:{0}成功",textBox1 .Text );
textBox1.Text = "";
}
//添加猫
private void button3_Click(object sender, EventArgs e)
{
myPet.Animals.Add(new Cat(textBox1 .Text));
label1.Text = string.Format("\n添加Cat:{0}成功",textBox1 .Text );
textBox1.Text = "";
}
//喂食
private void button4_Click(object sender, EventArgs e)
{
label1.Text = myPet.FeedTheAnimals();
}
}
//动物——抽象类
public abstract class Animal
{
protected string name;
public Animal(string name)
{
this.name = name;
}
public abstract string Eat();
}
//Dog类——派生类
public class Dog : Animal
{
public Dog(string name) : base(name) { }
public override string Eat()
{
return string .Format ("{0}:我是Dog,我要吃骨头",name);
}
}
//Cat类——派生类
public class Cat : Animal
{
public Cat(string name) : base(name) { }
public override string Eat()
{
return string.Format ("{0}:我是Cat,我要吃鱼",name);
}
}
//SmallDog类——派生类
public class SmallDog : Dog
{
public SmallDog(string name) : base(name) { }
public override string Eat()
{
return string .Format ("{0}:我是SmallDog,我要吃狗粮",name);
}
}
//泛型类——与Animal有关类
public class Pet<T> where T : Animal
{
private List<T> animals = new List<T>();
public List<T> Animals
{
get
{
return animals;
}
}
public string FeedTheAnimals()
{
string msg = "";
foreach(T x in animals)
{
msg += "\n" + x.Eat();
}
return msg;
}
}
}
运行结果: