第十九节 泛型、params可变数组 集合运用和区别
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
案例1: namespace e1 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } —————————————————————————————————————————————————————— namespace e1 { class Program { static void Main(string[] args) { Hashtable ht = new Hashtable(); Student zhang = new Student("张三", 25, Genders.Male, "唱唱歌", 100); Student jay = new Student("周杰杰", 29, Genders.Female, "双截棍", 101); Student lisi = new Student("李四", 28, Genders.Female, "跳舞", 111); //ArryList、HashTable的方法所添加的元素无论你给他传递的是什么类型数据 //他都会做一个隐式的装箱操作,将它转换为Object类型 /*微软在设计的集合类的时候希望集合存放所有的数据类型,所以将object类型作为 * 集合类的元素类型*/ ht.Add(zhang.Name, zhang); ht.Add(jay.Name, jay); ht.Add(lisi.Name, lisi); //取值 //Student stu = (Student)ht["周杰杰"]; //stu.SayHi(); //删除 Console.WriteLine("删除前元素的个数" + ht.Count); ht.Remove(lisi.Name); Console.WriteLine("删除后元素的个数" + ht.Count); //遍历哈希表的键 Console.WriteLine("遍历所有键:"); foreach (object obj in ht.Keys) { Console.WriteLine(obj.ToString()); } Console.WriteLine("遍历所有值:"); foreach (object obj in ht.Values) { //ArrayList,HashTable取值的时候,由于将所存放的元素转换成object所以取出来的 //时候值肯定是一个object类型。假设添加的时候是一个自定义类型,那么使用object //类型是不能够调用自定义类型的成员的,所有需要做强制类型转换后才能调用! Student stu = (Student)obj; Console.WriteLine(stu.Name); } //遍历键和值 foreach (object obj in ht.Keys) { string key = obj.ToString(); Student stu = (Student)ht[key]; stu.SayHi(); } Console.ReadKey(); } } } —————————————————————————————————————————————————————————————————————————————————————— 案例2 namespace e2 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } ———————————————————————————————————————— namespace e2 { class Teacher { private string name; private decimal salary; private int serviceOfYear; public Teacher(string name, decimal salary,int serviceOfYear) { this.name = name; this.salary = salary; this.serviceOfYear=serviceOfYear; } public void SayHi() { Console.WriteLine("姓名:{0},薪水:{1},工作年限:{2}",name,salary,serviceOfYear); } } } ———————————————————————————————————————————————————— using System; using System.Collections.Generic; using System.Text; using System.Collections; namespace e2 { class Program { static void Main(string[] args) { /*ArrayList是非泛型集合,存放在该集合内的元素会转换为object类型 /*我们可以在该集合存放的任意数据类型,这样不能保证数据的安全性 /*因此微软引入了饭型的概念,与ArrayList对应的泛型集合?List<>*/ ArrayList arr = new ArrayList(); Student zhang = new Student("张三", 25, Genders.Male, "唱唱歌", 100); Student jay = new Student("周杰杰", 29, Genders.Female, "双截棍", 101); Teacher tea = new Teacher("钱七", 7500, 4); arr.Add(zhang); arr.Add(tea); //foreach (Student stu in arr) //{ // Student s = (Student)obj; // stu.SayHi(); //} //创建泛型集合 //List<Teacher> liTeacher = new List<Teacher>(); //List<int> listint = new List<int>(); List<Student> liStudent = new List<Student>(); Console.ReadKey(); } } } ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————— 案例3: namespace e3 { class Teacher { private string name; private decimal salary; private int serviceOfYear; public Teacher(string name, decimal salary,int serviceOfYear) { this.name = name; this.salary = salary; this.serviceOfYear = serviceOfYear; } public void SayHi() { Console.WriteLine("姓名:{0},薪水:{1},工作年限:{2}",name,salary,serviceOfYear); } } } ———————————————————————————————————————————— namespace e3 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } ———————————————————————————————————————————————— namespace e3 { class Program { static void Main(string[] args) { List<Student> list = new List<Student>(); Student zhang = new Student("张三", 25, Genders.Male, "唱唱歌", 100); Student jay = new Student("周杰杰", 29, Genders.Female, "双截棍", 101); Student lisi = new Student("李四", 28, Genders.Female, "跳舞", 111); list.Add(zhang); list.Add(jay); list.Add(lisi); /*非泛型集合如:ArrayList,存取操作的时候会大量的进行装箱和拆箱的操作 * 这样非常的消耗性能,泛型集合避免了频繁的装箱和拆箱的操作,提高了程序的性能! * */ foreach (Student stu in list) { stu.SayHi(); } list.Remove(zhang); list.RemoveAt(0); Console.WriteLine("\n删除操作后:"); foreach (Student stu in list) { stu.SayHi(); } Console.ReadKey(); } } } —————————————————————————————————————————————————————————————————————————————————————————————————————————————— 案例4: namespace e4 { public enum Genders { Male, Female } class Student { public Student(string name, int age, Genders gender, string hobby, int popularity) { this.name = name; this.age = age; this.gender = gender; this.hobby = hobby; this.popularity = popularity; } private string name; public string Name { set { name = value; } get { return name; } } private int age; public int Age { set { if (value >= 18 && value <= 120) { age = value; } else { age = 18; } } get { return age; } } private Genders gender; public Genders Gender { set { gender = value; } get { return gender; } } private string hobby; public string Hobby { set { hobby = value; } get { return hobby; } } private int popularity; public int Popularity { set { popularity = value; } get { return popularity; } } public void SayHi() { Console.WriteLine("姓名:{0},年龄:{1},性别:{2},爱好:{3},受欢迎度:{4}",name,age,gender,hobby,popularity); } } } ———————————————————————————————————————————————————— namespace e4 { class Program { static void Main(string[] args) { Dictionary<string, Student> dict = new Dictionary<string, Student>(); Student zhang = new Student("张三", 25, Genders.Male, "唱唱歌", 100); Student jay = new Student("周杰杰", 29, Genders.Female, "双截棍", 101); Student lisi = new Student("李四", 28, Genders.Female, "跳舞", 111); dict.Add(zhang.Name,zhang); dict.Add(jay.Name,jay); dict.Add(lisi.Name,lisi); //遍历所有的键 Console.WriteLine("遍历所有的键:"); foreach (string key in dict.Keys) { Console.WriteLine(key); } //遍历所有的值 Console.WriteLine("\n遍历所有的值:"); foreach (Student value in dict.Values) { value.SayHi(); } //遍历所有的键和值 Console.WriteLine("\n遍历所有的键和值:"); foreach (string key in dict.Keys) { Student stu = dict[key]; Console.WriteLine("key:{0},value:{1}", key, stu.Age); } Console.ReadKey(); } } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
案例1:集合运用和区别 namespace e5 { class Employee { private string name; public string Name { set { name=value;} get { return name; } } private int age; private decimal salary; private int gznx; private string position; public Employee(string name,int age,decimal salary,int gznx,string position) { this.name = name; this.age = age; this.salary = salary; this.gznx = gznx; this.position = position; } public void Display() { Console.WriteLine("姓名:{0},年龄:{1},薪水:{2},工作年限:{3},职位:{4}",name,age,salary,gznx,position); } } } ———————————————————————————————— namespace e5 { class Em { private string department ; public string Depatment { set { department = value; } get { return department; } } private double telephone; public double Telephone { set { telephone = value; } get { return telephone; } } public Em(string department, double telephone) { this.department = department; this.telephone = telephone; } public void SayHi() { Console.WriteLine("部门:{0},电话:{1}",department,telephone); } } } —————————————————————————————————————————— namespace e5 { class Program { static void Main(string[] args) { Employee ep1 = new Employee("张海", 24, 3200, 3, "导购"); Employee ep2 = new Employee("刘强", 28, 8200, 3, "销售经理"); Employee ep3 = new Employee("杜克", 34, 15200, 3, "工程师"); Em eM = new Em("销售部门", 15268656218); //ArrayList arr = new ArrayList(); //arr.Add(ep1); //arr.Add(ep2); //arr.Add(ep3); //Console.WriteLine("ArrayList 存取值:"); //Employee em1 = (Employee)arr[2]; //em1.Display(); //Console.WriteLine("ArrayList遍历:"); //foreach (object obj in arr) //{ // Employee em = (Employee)obj; // em.Display(); //} ////Console.WriteLine("ArrayList 删除:"); ////arr.Remove(ep1); ////foreach (object obj in arr) ////{ //// Employee em = (Employee)obj; //// em.Display(); ////} //Hashtable ht = new Hashtable(); //ht.Add(ep1.Name, ep1); //ht.Add(ep2.Name, ep2); //ht.Add(ep3.Name, ep3); //Console.WriteLine("\nHashtable 存取值:"); //Employee em2 = (Employee)ht["刘强"]; //em2.Display(); ////Console.WriteLine("Hashtable 删除:"); ////ht.Remove(ep2.Name); ////Console.WriteLine("删除后的元素个:" + ht.Count); ////foreach (object obj in ht.Keys) ////{ //// Console.WriteLine(obj.ToString()); ////} //Console.WriteLine("Hashtable 遍历:"); //foreach (object obj in ht.Keys) //{ // string key = obj.ToString(); // Employee em3 = (Employee)ht[key]; // em3.Display(); //} //List<Employee> listEmployee=new List<Employee>(); //List<Em> listEm = new List<Em>(); //listEmployee.Add(ep1); //listEmployee.Add(ep2); //listEmployee.Add(ep3); //listEm.Add(eM); //Console.WriteLine("\nList<> 存取值:"); //Employee epy = (Employee)ep3; //epy.Display(); //Em eM1 = (Em)eM; //eM1.SayHi(); ////Console.WriteLine("List<>删除:"); ////listEmployee.Remove(ep2); ////foreach (Employee emp in listEmployee) ////{ //// emp.Display(); ////} //Console.WriteLine("List<>遍历:"); //foreach (Employee emp in listEmployee) //{ // emp.Display(); //} Dictionary<string, Employee> Dict = new Dictionary<string, Employee>(); Dict.Add(ep1.Name, ep1); Dict.Add(ep2.Name, ep2); Dict.Add(ep3.Name, ep3); Console.WriteLine("\nDictionary<> 存取值:"); Employee em2 =Dict["刘强"]; em2.Display(); //Console.WriteLine("Dictionary 删除:"); //Dict.Remove(ep2.Name); //Console.WriteLine("删除后的元素个:" + Dict.Count); //foreach (string key in Dict.Keys) //{ // Console.WriteLine(key); //} Console.WriteLine("Dictionary 遍历:"); foreach (string key in Dict.Keys) { Employee em3 = Dict[key]; em3.Display(); } Console.ReadKey(); } } } ———————————————————————————————————————————————————————————————————————————————————————— 案例2:params 关键字 namespace l1 { class Program { public static void UseParams(params int[] arr) { foreach (int i in arr) { Console.Write(i + " "); } Console.WriteLine(); } static void Main(string[] args) { //parmas关键字的作用就是使数组元素拥有可变的能力 /*通常我们定义一个方法为其传递一个数组,数组的大小必须是固定的 * 如果我们希望传递的这个数组大小是一个可变的,我们可以给这个参数 * 加上Params关键字,使这个方法变得更加灵活 */ //int []arr=new int[3]{3,4,5}; //UseParams(arr); UseParams(1, 2, 3); UseParams(1, 2, 3, 5, 8, 9, 6, 6); UseParams(1, 2, 3, 5, 2); UseParams(1, 2, 3, 4); Console.ReadKey(); } } } ———————————————————————————————————————————————————————— —————————————————————————————————————————————— 案例3 静态和实例 namespace l2 { class Program { /*在一个类中声明成员,只有加上Static关键字它就是一个静态的或者说他就是属于类的成员 * 如果没有static关键字它就是实例(对象)的,如果他是一个类的状态,行为我们通常定义它为static * 如果他是一个对象的状态,行为我们就定位它为实例成员 */ //定义人类的总数明显它与类有关与具体的实例没有任何关系,既然和类有关我们就将他定义为静态的 public static void HumanCount() { Console.WriteLine("人类的总数量约等于70亿......."); } //假设定义输出一个人的体重的行为,很明显它和实例(对象)有关 //既然于实例有关,我们通常定义为实例 public void PersoWeight(string name, double weight) { Console.WriteLine("{0}的体重为:{1}",name,weight); } static void Main(string[] args) { //静态成员通过:类名.成员 来调用 Program.HumanCount(); //实例成员通过: new创建一个对象来调用 Program p = new Program(); p.PersoWeight("张叁", 130.5); //在同一个类中我们可以直接使用方法名()调用方法 HumanCount(); Console.ReadKey(); } } }