一、集合与泛型
数组 集合(ArrayList) 泛型 优点 连续存储、快速从头到尾遍历和修改元素 使用大小可按需动态增加 类型安全;省去拆箱和装箱操作 缺点 创建时必须制定数组变量的大小;
两个元素之间添加元素比较困难类型不安全,接受所有类型的数据;
导致一直进行拆箱和装箱操作,带来很大的性能消耗 public partial class Form1 : Form { IList arrayAnimal_list = new ArrayList(); //声明并初始化集合 IList<Animal> arrayAnimal; //声明泛型 private void button3_Click(object sender, EventArgs e) { foreach (Animal item in arrayAnimal_list) //遍历集合 { MessageBox.Show(item.Shout()); } } private void button7_Click(object sender, EventArgs e) { arrayAnimal_list.RemoveAt(1); //初始计数为0,当1号位数据被删掉后,2号位数据的计数会变为1 arrayAnimal_list.RemoveAt(1); //这样才能删除其后数据,它始终都保证元素的连续性 } private void button4_Click(object sender, EventArgs e) { arrayAnimal = new List<Animal>(); //初始化泛型 arrayAnimal.Add(AnimalFactory.CreateAnimal("猫", "小花", 1)); //其添加指定类型数据 arrayAnimal.Add(AnimalFactory.CreateAnimal("狗", "阿毛", 2)); MessageBox.Show(arrayAnimal.Count.ToString()); //获得元素个数 }}
二、委托与事件
委托是一种引用方法的类型,一旦为委托分配了方法,委托将与该方法具有安全相同的行为;事件是在发生其他类或对象关注的事情时,类或对象可通过事件通知它们。
个人理解是为了让一个类能在内部执行其他类的方法,与观察者模式结合会有更好的效果。
class Program //委托和事件都在Cat类中定义,是为了由Cat类去触发Mouse类;当Cat发出叫声时,Mouse就会跑 { static void Main(string[] args) { Cat cat = new Cat("Tom"); Mouse mouse1 = new Mouse("Jerry"); Mouse mouse2 = new Mouse("Jack"); cat.CatShout += new Cat.CatShoutEventHandler(mouse1.Run); //这两行表示将Mouse的Run方法通过实例化委托 cat.CatShout += new Cat.CatShoutEventHandler(mouse2.Run); //Cat.CatShoutEventHandler登记到Cat的事件CatShout当中 cat.Shout(); //实现猫一叫,老鼠就跑的需求Console.Read(); } } //无参数委托事件 class Cat { private string name; public Cat(string name) { this.name = name; } public delegate void CatShoutEventHandler(); //声明委托CatShoutEventHandler public event CatShoutEventHandler CatShout; //声明事件CatShout,它的事件类型是委托CatShoutEventHandler public void Shout() { Console.WriteLine("喵,我是{0}.", name); if (CatShout != null) { CatShout(); //当执行Shout()方法时,如果Catshout中有对象登记事件,则执行CatShout(); } } } class Mouse { private string name; public Mouse(string name) { this.name = name; } public void Run() { Console.WriteLine("老猫来了,{0}快跑!", name); } }//有参数委托事件,增加了一个CatShoutEventArgs,用来传递Cat的名字 class Cat { private string name; public Cat(string name) { this.name = name; } public delegate void CatShoutEventHandler(object sender, CatShoutEventArgs args); //声明委托时有两个参数 public event CatShoutEventHandler CatShout; //sender用来指向发送通知的对象,args用来传递数据 public void Shout() { Console.WriteLine("喵,我是{0}.", name); if (CatShout != null) { CatShoutEventArgs e = new CatShoutEventArgs(); //实例化参数 e.Name = this.name; CatShout(this, e); //当事件触发时,将这两个参数传递给委托 } } }class Mouse { private string name; public Mouse(string name) { this.name = name; } public void Run(object sender, CatShoutEventArgs args) //由于委托增加了两个参数,这里也增加了两个参数 { Console.WriteLine("老猫{0}来了,{1}快跑!", args.Name, name); } }public class CatShoutEventArgs : EventArgs //继承EventArgs,用来传递数据{private string name;public string Name{get { return name; }set { name = value; }}}
时间: 2024-10-01 04:49:07