集合1
定义:集合就是一种存放多个数据的容器类型,比如之前学过的数组Array(完整的类型是System.Array)。
预定义的常用集合:
动态数组:ArrayList;列表:List;字典:Dictionary;队列:Queue;栈:Stack。
动态数组ArrayList:
- 初始化,可以不指定大小;
- 获取长度,使用Count属性;
- 添加Add;
- 删除Remove,RemoveAt;
- 访问[index];
更好用的List:
ArrayList是类型不安全的,而且有拆箱装箱的性能问题。于是出现了List,但List存储速度没有数组那么快。
List<Dog> list= new List<Dog>();
list.Add(new Dog("A"));
list.Add(new Dog("B"));
list.RemoveAt(1);
for(int if =0,if<list.Count;i++)
{
list[i].PrintName();
}
集合2
字典Dictionary<TKey,Tvalue>
定义:字典容器存储的是一系列的键值对,每个值对应一个唯一的键。键的意义在于,我们可以通过键相对的高效的访问到值。感觉与Java中的map类似。
字典操作
数量:Count;添加:Add(key,value);删除:Remove;访问:[key]。
Dictionary<string, Dog> dic = new Dictionary<string, Dog>();
dic.Add("A", new Dog("A"));
dic.Add("B", new Dog("B"));
dic["A"].PrintName();
栈
定义:栈是先进后出,后进先出的一种容器。就好比是只有一个开口的羽毛球筒。
栈的操作
出栈:Pop;入栈:Push;获取栈顶元素:Peek。
Stack<Pet> stack = new Stack<Pet>();
stack.Push(new Dog("A"));
stack.Push(new Cat("B"));
stack.Peek().PrintName();
stack.Pop();
stack.Peek().PrintName();
队列
队列是先进先出的容器。类似两端开口的羽毛球筒。
队列的操作
出队 Dequeue;入队 Enqueue。
Queue<Pet> queue = new Queue<Pen>();
queue.Enqueue(new Dog("A"));
queue.Enqueue(new Dog("B"));
queue.Enqueue(new Dog("C"));
Pet pet = null;
pet = queue.Dequeue();
pet.PrintName();
委托
什么是委托
委托就是持有一个或者多个方法的对象!并且该对象可以执行,可以传递。
声明委托类型
委托可以持有方法,可以声明,它是一种引用类型!例如:
- delegate void ActCute();
定义委托类型的对象
- ActCute actCute;
给委托对象赋值
class Dog{
public void WagTail(){..}
}
actCute =dog.WagTail;
使用委托类型
像调用函数一样使用委托类型。
- actCute();
例如:
delegate void ActCute();
public void Look() { }
public void See() { }
...
ActCute del = null;
Dog dog = new Dog("A");
Cat cat =new Cat("B");
del = dog.See;
del +=Cat.Look;
del();
Lambda表达式
什么是匿名方法
delegate void ActCute();
ActCute del;
del = delegate(){};
c#3.0出现的Lambda表达式
del = delegate(){};
del = ()=>{};
例如:
上面的例子中:
del +=() =>{
Console.WriteLine("do nothing");
};