传智播客c#基础- -多态例子(苹果,橘子)- - 06

前言:

c#是面向对象的程序设计语言,面向对象的程序设计语言有三个特点。分别是:继承,封装,多态。今天分享的这个例子既体现了继承,也体现出了多态和封装。可以说一个例子把面向对象的三个特征都体现了一遍,俗话说麻雀虽小五脏俱全。

目录

例子:

UML类图:

结果:

代码:

Form1窗体 

放入苹果:

放入橘子:

过一天:

fruit.cs

apple.cs

orange.cs

fruitbox.cs


例子:

        

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

    }
}

 

posted @ 2019-10-23 21:03  康世行  阅读(59)  评论(0编辑  收藏  举报