传智播客c#基础- -多态例子(苹果,橘子)- - 06
前言:
c#是面向对象的程序设计语言,面向对象的程序设计语言有三个特点。分别是:继承,封装,多态。今天分享的这个例子既体现了继承,也体现出了多态和封装。可以说一个例子把面向对象的三个特征都体现了一遍,俗话说麻雀虽小五脏俱全。
目录
例子:
UML类图:
结果:
代码:
Form1窗体
//定义盒子变量
fruitbox box = new fruitbox();
放入苹果:
apple apples = new apple(50);
box.AddFruit(apples);//添加水果
放入橘子:
box.AddFruit(new orange(30));//添加橘子
过一天:
string str = "";//向lisbox添加内容
double old = box.TotaWeight();//总重量
str = "一天前总重量有:" + old;
listBox1.Items.Add(str);
str = "其中苹果有:" + box.strApple();
listBox1.Items.Add(str);
str = "其中橘子有:" + box.strOrange();
listBox1.Items.Add(str);
double reduce = box.PassoneDay();
str = "一天内损失重量" + reduce;
listBox1.Items.Add(str);
double now = old - reduce;
str = "目前总重量" + now;
listBox1.Items.Add(str);
fruit.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 多态练习
{
public class fruit
{
public virtual double CurWeight()//当前重量
{
return 0;
}
public virtual double ReduceWeidht()//减少重量
{
return 0;
}
//public virtual string TypeName()
//{
//}
}
}
apple.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 多态练习
{
public class apple:fruit
{
/// <summary>
/// 给单个苹果赋初始值
/// </summary>
/// <param name="MvartotalWeight"></param>
public apple( Double MvartotalWeight)
{
this._MvartotalWeight = MvartotalWeight;//苹果初值
}
double _MvartotalWeight;
/// <summary>
/// 给当前重量赋值的属性
/// </summary>
public double MvartotalWeight
{
get { return _MvartotalWeight; }
set { _MvartotalWeight = value; }
}
/// <summary>
/// 苹果当前重量
/// </summary>
/// <returns></returns>
public override double CurWeight()
{
return MvartotalWeight;//返回当前重量
}//end CurWeight
/// <summary>
/// 每天减少的重量
/// </summary>
/// <returns></returns>
public override double ReduceWeidht()//减少重量
{
//苹果每天重量减少4克,直到原来重量的4/5
double oldWeight = CurWeight();//损失之前的重量
double nowWeight = oldWeight;//当前重量
nowWeight = oldWeight - 4;//损失之后的重量
//判断重量是否是原来的4/5
if (nowWeight<=oldWeight*3/5)
{
nowWeight = 0;
}
MvartotalWeight = nowWeight;//把损失之后的重量,从新赋值给当前重量。
return oldWeight-nowWeight;//减少的重量
}//end ReduceWeidht
}//end apple
}
orange.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 多态练习
{
public class orange:fruit
{
/// <summary>
/// 对单个橘子重量初始化
/// </summary>
/// <param name="MvartotalWeight">单个橘子的重量</param>
public orange(double MvartotalWeight)
{
this._MvartotalWeight = MvartotalWeight;
}
double _MvartotalWeight;
/// <summary>
/// 给当前重量赋值的属性
/// </summary>
public double MvartotalWeight
{
get { return _MvartotalWeight; }
set { _MvartotalWeight = value; }
}
/// <summary>
/// 橘子的当前总重量
/// </summary>
/// <returns></returns>
public override double CurWeight()
{
return MvartotalWeight;//返回当前重量
}//end CurWeight
/// <summary>
/// 橘子的减少重量
/// </summary>
/// <returns></returns>
public override double ReduceWeidht()
{
//苹果每天重量减少4克,直到原来重量的4/5
double oldWeight = CurWeight();//损失之前的重量
double nowWeight = oldWeight;//当前重量
nowWeight = oldWeight - 3;//损失之后的重量
//判断重量是否是原来的3/5
if (nowWeight <= oldWeight * 3 / 5)
{
nowWeight =0;
}
MvartotalWeight = nowWeight;//把损失之后的重量再次,赋值给当前重量。
return oldWeight - nowWeight;//减少的重量
}//end ReduceWeidht
}//end orange
}
fruitbox.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace 多态练习
{
public class fruitbox
{
public ArrayList mcol = new ArrayList();//储存水果集合
/// <summary>
/// 清空集合
/// </summary>
public void ReleaseFruits()
{
//实例化水果类
fruit afruit = new fruit();
for (int i = 0; i < mcol.Count; i++)
{
mcol.Clear();//清空集合
}//end for
}//end ReleaseFruits
/// <summary>
/// 添加水果
/// </summary>
/// <param name="afruit">具体的水果类</param>
public void AddFruit(fruit afruit)
{
//向集合添加水果
mcol.Add(afruit);
}//end AddFruit
/// <summary>
/// 盒子里水果的总重量
/// </summary>
/// <returns>返回重量</returns>
public double TotaWeight()
{
double total = 0;//水果总重量
//累加集合里水果的重量
for (int i = 0; i <mcol.Count; i++)
{
fruit frui = (fruit)mcol[i];
total =total+ frui.CurWeight();//对当前重量进行累加
}//end for
return total;//返回当前重量
}//end TotaWeidht
/// <summary>
/// 每天减去的重量
/// </summary>
/// <returns></returns>
public double PassoneDay()
{
double total = 0;//每天损失的总重量
//把每天损失的重量,累加到一起
for (int i = 0; i <mcol.Count ; i++)
{
fruit Fruit = (fruit)mcol[i];//把集合里的类强制转为父类。
total = total + Fruit.ReduceWeidht();//把损失的重量累加
}//end for
return total;
}//end PassoneDay
/// <summary>
/// 苹果的数量,累加。
/// </summary>
/// <returns></returns>
public double strApple()
{
double count = 0;//计数
//变量集合,添加苹果
for (int i = 0; i <mcol.Count; i++)
{
fruit Fruit = (fruit)mcol[i];
//判断是否是苹果
if (Fruit.ToString()=="多态练习.apple")
{
count = count + 1;
}
}//end for
return count;//返回苹果数量`
}//end strApple
/// <summary>
/// 橘子的数量,累加。
/// </summary>
/// <returns></returns>
public double strOrange()
{
double count = 0;//计数
//变量集合,添加苹果
for (int i = 0; i < mcol.Count; i++)
{
fruit Fruit = (fruit)mcol[i];
//判断是否是苹果
if (Fruit.ToString() == "多态练习.orange")
{
count += 1;
}//end if
}//end for
return count;//返回橘子数量
}//end strOrange
}
}
欢迎访问csdn的博客:
https://blog.csdn.net/kangshihang1998?spm=1010.2135.3001.5343