第十九节 泛型、params可变数组 集合运用和区别

View Code
案例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();
           
        }
    }
}
View Code
案例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();

            
        }
    }
}

 

posted @ 2012-06-20 21:14  ComBat  阅读(235)  评论(0编辑  收藏  举报