C#中的多态

C#中的多态

一、多态的概念

  一个接口,多个功能。
静态多态:重载函数。
动态多态:抽象类和抽象函数。

二、动态多态

抽象类格式:
abstract class CName
{
abstract public return_type Func(Para_list…);

}

子类:
class Sub:CName
{
overried public return_type Func(Para_list…);
}

三、小demo

共三个文件:

//Program.cs
/*
设定场景:
    使用不止一种标准对分数进行定级,且今后仍会扩展其他标准
 */
using System;
using Edu;
namespace Edu
{
    public static class Program
    {
        public static void Main(string[] args)
        {
            Score score = new Score();
            int conts = 89;
            score.Set_Score(ref conts);
            score.Set_Level_Tool(new ScoreLevel_Basic());
            Console.WriteLine("Get the corrospond level:" + score.Get_Level());
            score.Set_Level_Tool(new ScoreLevel_Super());
            Console.WriteLine("Get the corrospond level:" + score.Get_Level());
        }
    }
}
//Score.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace Edu
{
    public class Score
    {
        private int score;
        private ScoreLevel score_tool;
        
        public void Set_Score(ref int a_score)
        {
            this.score = a_score;
        }
        public void Set_Level_Tool(ScoreLevel a_tool)
        {
            this.score_tool = a_tool;
        }

        public int Get_Level()
        {
            return this.score_tool.Get_Level(ref this.score);
        }

    }
}
//ScoreTools.cs
using System;
using System.Collections.Generic;
using System.Text;

namespace Edu
{
    public abstract class ScoreLevel
    {
        //由分数获取成绩等级
        //para:
        //  a_score:分数
        //  return:等级
        abstract public int Get_Level(ref int a_score);
    }
    public class ScoreLevel_Basic:ScoreLevel
    {
        public ScoreLevel_Basic() 
        {
            Console.WriteLine("基础算法被启用。");
        }
        ~ScoreLevel_Basic()
        {
            Console.WriteLine("基础算法被弃用。");
        }

        public override int Get_Level(ref int a_score)
        {
            if(a_score >= 90)
            {
                return 1;
            }
            else if(a_score >= 80)
            {
                return 2;
            }
            else if(a_score >= 70)
            {
                return 3;
            }
            else
            {
                return 4;
            }
        }
    }
    
    public class ScoreLevel_Super : ScoreLevel
    {
        public ScoreLevel_Super() 
        {
            Console.WriteLine("超级算法被启用");
        }
        ~ScoreLevel_Super()
        {
            Console.WriteLine("超级算法被弃用");//很尴尬,这里的析构和资源回收跟C++的不一样,没有看到析构函数的调用。
        }
        public override int Get_Level(ref int a_score)
        {
            if(a_score >= 95)
            {
                return 1;
            }
            else if(a_score >= 90)
            {
                return 2;
            }
            else if(a_score >= 85)
            {
                return 3;
            }
            else
            {
                return 4;
            }
        }
    }
}

四、小疑问

  各位大佬,C#是不是不能像C++一样传递常引用参数?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值