传智播客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
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号