设计一个Windows应用程序,要求如下。
1.构造一个产品基类。
2.分别定义家电、日用百货、衣服等派生类,要求具有不同的特征和行为。
3.定义一个泛型货架类,约束参数类型为产品类。该泛型的货架类包括一个泛型集合,用于存放各种产品对象,并包含一个方法用于输出每个产品的相关信息.
4.仿照实例6-4,定义泛型的货架类对象,完成对产品的添加和信息的输出。
界面设计
代码
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;
using System.Collections;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
Shelves<Product> prt = new Shelves<Product>();
private void btnHea_Click(object sender, EventArgs e)
{
prt.Products.Add(new Hea(txtName.Text));
lblShow.Text += string.Format("\n添加家电:{0},成功", txtName.Text);
}
private void btnGm_Click(object sender, EventArgs e)
{
prt.Products.Add(new Gm(txtName.Text));
lblShow.Text += string.Format("\n添加日用百货:{0},成功", txtName.Text);
}
private void btnClothes_Click(object sender, EventArgs e)
{
prt.Products.Add(new Clothes(txtName.Text));
lblShow.Text += string.Format("\n添加衣服:{0},成功", txtName.Text);
}
private void btnType_Click(object sender, EventArgs e)
{
lblShow.Text = prt.TypeTo();
}
public abstract class Product //产品基类
{
protected string name; //产品名字
public Product(string name)
{
this.name = name;
}
public abstract string Type(); //基类抽象方法Type()
}
public class Hea : Product //家电类
{
public Hea(string name) : base(name) { } //自身类的构造函数加上继承基类的构造函数
public override string Type() //重写基类Type()方法
{
return string.Format("{0}:我是家电!",name);
}
}
public class Gm : Product //日用百货类
{
public Gm(string name) : base(name) { } //继承基类的构造函数
public override string Type() //重写基类Type()方法
{
return string.Format("{0}:我是日用百货!", name);
}
}
public class Clothes : Product //衣服类
{
public Clothes(string name) : base(name) { } //自身类的构造函数加上继承基类的构造函数
public override string Type() //重写基类Type()方法
{
return string.Format("{0}:我是衣服!", name);
}
}
public class Shelves<T> where T : Product //自定义泛型类Shelves
{
private List<T> prts = new List<T>(); //定义一个T类型的数组,T继承于产品类
public List<T> Products => prts; //泛型的只读属性,此处省略get访问器
/*public List<T> Products
{
get{return prts;}
} */ //如果出现类型不匹配使用get语句
public string TypeTo() //返回产品信息
{
string msg = string.Empty; //字符串初始化为空
foreach (T prt in prts)
{ msg += "\n" + prt.Type(); } //调用T集合产品中的Type()方法
return msg; //返回字符串
}
}
}
}