C# 动物运动会 (基础应用1)

在这里,我们利用动物运动会来将C#的面向对象进行一个相对比较全面的介绍。

面向对象基础 编程 C# Form窗体应用编程

一群动物要进行一场叫声比赛,在这里我们用到了,面向对象的大部分知识,有封装、继承、多态、接口、抽象类、集合、泛型等。

代码:

using System;
using System.Windows.Forms;
using System.Collections.Generic;

public partial class JiaoSheng : Form
{
public JiaoSheng()
{
InitializeComponent();
}

    private void Form1_Load(object sender, EventArgs e){  }IList<Mammal> arrayMammal;private void button1_Click_1(object sender, EventArgs e)//猫叫{Cat cat = new Cat("小咪");//Cat cat;  cat = new Cat();  cat对象实例化cat.ShoutNum = 5;MessageBox.Show(cat.Shout());}private void button2_Click(object sender, EventArgs e){Dog dog= new Dog("旺财");//Cat cat;  cat = new Cat();  cat对象实例化dog.ShoutNum = 5;MessageBox.Show(dog.Shout());}private Mammal[] arrayAnimal;//声明动物数组private void button3_Click(object sender, EventArgs e){arrayMammal = new List<Mammal>();//确定实例化数量arrayMammal.Add(new Cat("小花"));arrayMammal.Add(new Dog("阿毛"));arrayMammal.Add(new Cattle("小黑"));arrayMammal.Add(new Sheep("娇娇"));arrayMammal.Add(new Duck("咪咪"));arrayMammal.RemoveAt(1);arrayMammal.RemoveAt(2);MessageBox.Show(arrayMammal.Count.ToString());}private void button4_Click(object sender, EventArgs e){foreach(Mammal item in arrayMammal)//arrayAnimal数组遍历{MessageBox.Show( item.Shout() );}}private void button5_Click(object sender, EventArgs e){MachineCat mcat = new MachineCat("叮当");StoneMonkey wukong = new StoneMonkey("孙悟空");IChange[] array = new IChange[2];array[0] = mcat;array[1] = wukong;MessageBox.Show(array[0].ChangeThing("各种各样的东西!"));MessageBox.Show(array[1].ChangeThing("各种各样的东西!"));}
}interface IChange
{string ChangeThing(string thing);
}abstract class Mammal//哺乳动物类
{protected string name = "";//声明cat类的私有字符串变量namepublic Mammal(string name)//cat类的构造方法{this.name = name;}public Mammal()//构造方法重载{this.name = "无名";}protected int shoutNum = 4;//cat类的内部私有shoutNum字段,同一个类中使用   变量  provate表示继承时,子类(派生类)对父类(基类)有完全访问权public int ShoutNum//ShoutNum属性,get+set方法,可在不同的类中使用   函数{get{return shoutNum;}set{if (value <= 10){shoutNum = value;}else{shoutNum = 10;}}}public string Shout()//virtual表示此方法是虚方法,可被子类方法重写。{string result = "";for (int i = 0; i < shoutNum; i++)//循环相应的次数{result += getShoutSound() + ", ";}return "我的名字叫:" + name + " " + result;}protected abstract string getShoutSound();//"得到叫声",虚方法,让子类重写,只需给继承的子类使用,所以用protected修饰符
}//继承格式为 "子类:父类 "
//子类调用父类变量时,用":base(x)"class Cat:Mammal
{public Cat():base()//构造方法重载{ }public Cat(string name) : base(name)//cat类的构造方法{ }protected override string getShoutSound()//getShoutSound函数  override表示方法重写{return " 喵";}
}class MachineCat : Cat, IChange
{public MachineCat() : base(){ }public MachineCat(string name) : base(name){ }public string ChangeThing(string thing){return base.Shout() + "我有万能口袋,我可变出:" + thing;}
}class StoneMonkey : Cat, IChange
{public StoneMonkey() : base(){ }public StoneMonkey(string name) : base(name){ }protected override string getShoutSound()//getShoutSound函数  override表示方法重写{return "zhi";}public string ChangeThing(string thing){return base.Shout() + "我会七十二变,我可变出:" + thing;}
}class Dog:Mammal
{public Dog() : base()//构造方法重载   base用于调用父类成员变量{ }public Dog(string name) : base(name)//cat类的构造方法{ }protected override string getShoutSound()//getShoutSound函数 {return "汪"; }
}class Cattle : Mammal
{public Cattle() : base()//构造方法重载   base用于调用父类成员变量{ }public Cattle(string name) : base(name)//cat类的构造方法{ }protected override string getShoutSound()//getShoutSound函数{return "哞"; }
}class Sheep : Mammal
{public Sheep() : base()//构造方法重载   base用于调用父类成员变量{ }public Sheep(string name) : base(name)//cat类的构造方法{ }protected override string getShoutSound()//getShoutSound函数{return "咩"; }
}class Duck : Mammal
{public Duck() : base()//构造方法重载   base用于调用父类成员变量{ }public Duck(string name) : base(name)//cat类的构造方法{ }protected override string getShoutSound()//getShoutSound函数{return "嘎"; }
}

动物运动会(C# 面向对象编程)(全)相关推荐

  1. python基础系列教程——python面向对象编程全解

    全栈工程师开发手册 (作者:栾鹏) python教程全解 python面向对象编程全解. 面向对象技术简介 一个类占有一个独立的空间,类中的属性叫做类变量,类中的函数,叫做类的方法. 类(Class) ...

  2. JavaScript面向对象编程深入分析

    JavaScript面向对象编程深入分析 一. Javascript 面向对象编程:封装 Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又 ...

  3. python用类名直接调用方法_一文读全 Python 的面向对象编程方法

    背景介绍: Python 支持三种形式的编程,分别是:"命令式"."函数式"和"面向对象式". 很多优秀的开源 Python 项目里都用到了 ...

  4. c++全局类对象_史上最全 Python 面向对象编程

    面向对象编程和函数式编程(面向过程编程)都是程序设计的方法,不过稍有区别. 面向过程编程: 1. 导入各种外部库 2. 设计各种全局变量 3. 写一个函数完成某个功能 4. 写一个函数完成某个功能 5 ...

  5. 带你学python基础:面向对象编程

    面向对象编程是个啥呢,其实,在传统的语言中,比如 C 语言,是不存在面向对象编程这个概念的,那时候的语言只有面向过程编程,也就是我们写代码从头写到底,最多也就是有函数.所以,这样的代码风格是比较难维护 ...

  6. java理念_java温故而知新(9)OOP(面向对象编程)理念

    Object   Oriented   Programming   (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在   Object-Orie ...

  7. python 二——函数、装饰器、生成器、面向对象编程(初级)

    本节内容 1.函数 2.装饰器 3.生成器 4.类 一.函数 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强... ...

  8. 《Java面向对象编程(阿里云大学)》笔记(文档+思维导图)

    课程链接:https://edu.aliyun.com/course/1011 (还是建议去看课程,笔记仅供参考. 由于文中的所有内容均为手敲,并且有些代码并未验证,因此如有错误,烦请指出~ 谢谢~~ ...

  9. 面向对象编程,我的思想[下]

    .3.1构造函数.默认构造函数. 缺省构造函数 对于上面的实例,它已经能完成绝大部分工作了,但它还是不完善的,还有许许多多的细节等到我们去完善!也许有的同学已经注意到了,当我创建完"jing ...

最新文章

  1. Python:Item Pipeline
  2. 投票系统之防止重复投票
  3. 关于css3的自定义字体
  4. v8声卡调音软件_sE VOXTOON AF2评测:解决复杂跳线需求的声卡
  5. golang linux安装
  6. ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
  7. bugly android8.1加固,2020-09-27 Bugly Android热更新使用指南
  8. Tomcat学习总结(15)—— Apache Tomcat各版本比较
  9. 【编程帮助】python中字符串前的 r、b、u、f 的含义及用法
  10. arbotix导入出错
  11. 华硕服务器 u盘安装系统,华硕台式机重装系统详细图解步骤
  12. python编程基础及应用教程答案_Python编程基础教程
  13. 别人恃才自傲,你却虚怀若谷。——保持谦虚
  14. e470c拆机图解全拆 thinkpad_THINKPAD e470硬盘拆解教程是?
  15. 自动配置和 thymeleaf模板引擎
  16. 微信小程序自定义tabBar使用
  17. 微信 日志服务器 并发大,微信高性能线上日志系统xlog剖析
  18. 快速入门Kotlin
  19. Activiti工作流(一):OA 上的那些请假流程如何快速实现呢?
  20. KSQL:Apache Kafka的流式SQL

热门文章

  1. html页面全面屏手机,/* js 判断手机是否全面屏 */
  2. ONES 2018年斩获业内十项大奖,这个产品有点儿厉害
  3. oracle添加分区语句_Oracle分区详解和创建
  4. MTK电池校准CAR_TUNE_VALUE
  5. Spring之(三)用Spring改造打印机
  6. 小米5s html,小米5s Plus
  7. python字符串相加算法_python:复杂字符串算法
  8. TreeMap按value排序
  9. Uniapp 连接ios真机调试小坑
  10. 126全部及图片切换