zoukankan      html  css  js  c++  java
  • 关于C#面向对象2

     多态:表示不同的对象可以执行相同的动作,但是通过它们自己的实现代码来执行。这里需要将父类将该成员声明为虚拟的,而且用到了方法重写(override).

         抽象类:用abstract声明抽象类,注意抽象类不能实例化,抽象方法必须被子类重写。

          接口:是把隐式公共方法和属性组合起来,以封装特定的功能的一个集合,一旦类实现了接口,就可以支持接口所指定的所有属性好成员。一个类可以支持多个接口,多个类也可以支持相同的接口。

          集合:是优于数组,.NET Framework提供了用于数据存储和检索的专用类。集合随着我们向里边添加元素而自动增加,自动调节大小。提供了对堆栈,队列和哈希表的支持。

         泛型:具有占位符(即参数类型)的类,结构,接口和方法。和集合紧密联系,泛型集合可以获得类型安全的直接优点。也就是说类型固定了。

     定义类和接口的代码:

    <span style="font-size:18px;">    abstract class Animal//利用关键字abstract定义了一个抽象类  
        {  
            protected string name = "";  
            public Animal(string name)  
            {  
                this.name = name;  
            }  
            public Animal()  
            {  
                this.name = "无名";  
            }  
      
            protected int shoutNum = 6;//叫声的次数  
            public int ShoutNum  
            {  
                get  
                {  
                    return shoutNum;  
                }  
                set  
                {  
                    shoutNum = value;   
                }  
            }  
      
      
            public string shout()//叫声发出的代码  
            {  
                string result = "";  
                for (int i = 0; i < shoutNum; i++)   
                    result += getshoutsound() + ", ";//调用了getshoutsound的虚方法  
                    return "我的名字叫"+ name + ""+result ;  
       
            }  
            protected virtual string getshoutsound()//修饰符virtual表示此方法为虚方法,可以被子类重写  
            {  
                return "";  
            }  
        }  
      
          
        //定义不同的子类,来实现父类,其实就是多态的很好体现  
        class Cat:Animal //子类猫  
        {  
            public Cat():base()  
            {}  
            public Cat (string name):base (name)  
            {}  
            protected override string getshoutsound()  
            {  
                return"";  
            }  
        }  
      
      
        class Dog : Animal//子类狗  
        {  
            public Dog()  
                : base()  
            { }  
            public Dog(string name)  
                : base(name)  
            { }  
            protected override string getshoutsound()  
            {  
                return "";  
            }  
        }  
      
      
        class Cattle : Animal//子类牛  
        {  
            public Cattle()  
                : base()  
            { }  
            public Cattle(string name)  
                : base(name)  
            { }  
            protected override string getshoutsound()  
            {  
                return "";  
            }  
        }  
      
      
        class sheep:Animal//子类羊  
        {  
            public sheep ():base()  
            {}  
            public sheep(string name)  
                : base(name)  
            { }  
            protected override string getshoutsound()  
            {  
               return "";  
            }  
        }  
      
      
        interface Ichange//定义了一个接口  
        {  
            string changething(string thing);  
        }  
      
      
        class Machinecat : Cat, Ichange//定义了个机器猫,继承父类猫,并使用了接口Ichange  
        {  
            public Machinecat()  
                : base()  
            { }  
            public Machinecat(string name)  
                : base(name)  
            { }  
            public string changething(string thing)  
            {  
                return base.shout ()+ "我有万能口袋,我可以变出:" + thing;  
            }  
        }</span>  

    下边是客户端的代码:

    <span style="font-size:18px;">        //private Animal[] arrayAnimal;//声明一个动物数组  
            //集合的使用  
           IList<Animal> arrayAnimal;//声明一个泛型集合变量,用接口Ilist,注意Ilist<Animal>表示此集合变量只能接受Animal类型  
      
            //猫叫的按钮事件  
            private void button1_Click(object sender, EventArgs e)  
            {  
                Cat cat = new Cat("咪咪"); //类的实例化  
                cat.ShoutNum = 7;  
      
                MessageBox.Show(cat.shout());  
            }  
            //狗叫的按钮事件  
            private void button2_Click(object sender, EventArgs e)  
            {  
                Dog dog = new Dog("旺财");//这里只是简单的调用方法,即可实现目的,体现了封装的特性  
                dog.ShoutNum = 6;  
                MessageBox.Show(dog.shout());  
            }  
            //动物报名的按钮  
            private void button3_Click(object sender, EventArgs e)//动物报名按钮,  
            {  
                //arrayAnimal = new Animal[5];//实例化最多可以可报名5个的动物数组对象  
                arrayAnimal = new List<Animal> ();//实例化List对象  
                arrayAnimal.Add(new Cat ("小花"));//报名分别是猫和狗  
                arrayAnimal.Add( new Dog("阿毛"));  
                arrayAnimal.Add ( new Dog("小黑"));  
                arrayAnimal.Add(new Cat("娇娇"));  
                arrayAnimal.Add( new Cat("咪咪"));  
          
                MessageBox.Show(arrayAnimal.Count.ToString());//打印出我们添加的个数  
      
                arrayAnimal.RemoveAt(1);//这里还可以删除我们多添加的。  
      
            }  
            //让报名的所有动物进行叫声比赛  
            private void button4_Click(object sender, EventArgs e)  
            {  
                foreach (Animal item in arrayAnimal)//遍历整个数组,让他们一次实施shout的方法  
                {  
                    MessageBox.Show(item.shout());  
                }  
      
            }  
            //叮当猫变出东西的事件代码  
            private void button5_Click(object sender, EventArgs e)  
            {  
                Machinecat mcat = new Machinecat("叮当");//实例化机器猫  
                Machinecat mcat1 = new Machinecat("叮当2");  
      
                Ichange[] array = new Ichange[2];//声明一个接口数组,将两个实例赋值给数组  
                array[0] = mcat;  
                array [1]=mcat1;  
      
                MessageBox.Show(array[0].changething("各种各样的东西!"));//利用多态性,实现不同的changething  
                MessageBox .Show (array[1].changething ("好多好多东西哈!"));  
            }</span>  
  • 相关阅读:
    在linux中连接wifi
    解决Chrome插件安装时出现的“程序包无效”问题
    全网最简单明了的MySQL连接Eclipse方法(JDBC详细安装方式及简单操作)2020新版
    机器学习--机器学习的分类
    背英语单词很困难,不妨学习一下词根词缀吧(每天10个词根、词缀)Part 3
    C++课程设计详解-12306的模拟实现
    C++课程设计,12306模拟写起来就是这么粗暴
    计算机组成原理--储存器概述
    JAVA I/O 与装饰者模式UML图
    PAT-字符串处理-B 1024 科学计数法 (20分)
  • 原文地址:https://www.cnblogs.com/nwj-0613/p/4827952.html
Copyright © 2011-2022 走看看