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++一样传递常引用参数?