上一篇讲了一部分物件导向的特性,今天要来讲多型,在此之前要先介绍介面(interface),以及他的用法
假设我今天要做计算机的程序,运算子都要自己写,我该怎麽做?
我先定义要做的范围为两个数的「加、减、乘、除」,之後先写一个介面
public interface Operator
{
decimal GetResult(decimal x, decimal y);
}
之後要定义加减乘除的类别
public class Addition : Operator
{
public decimal GetResult(decimal x, decimal y)
{
return x+y;
}
}
public class Subtraction : Operator {
public decimal GetResult(decimal x, decimal y) {
return x-y;
}
}
public class Multiplication : Operator {
public decimal GetResult(decimal x, decimal y) {
return x*y;
}
}
public class Division : Operator {
public decimal GetResult(decimal x, decimal y) {
if (y == 0)
{
throw new ArgumentException("除数不可为0");
}
return x/y;
}
}
这样写,是因为你无法确定使用者会输入什麽,因此需要动态的建立物件,透过介面来完成你的计算机主程序
你的运算逻辑可能会是长这样
public decimal Operate(decimal x, Operator o, decimal y)
{
return o.GetResult(x, y);
}
透过介面,你不用明确定义传入的参数为哪种class,而是直接将运算子动态的传入到方法里面,再去呼叫介面定义的方法回传结果,这种让物件可以为多种型别的特性,就叫多型。
关於一个类别能否转换自己以外的型别,除了用介面来写出多型的Code,也可以看它是否有继承关系,透过先抽取出共同逻辑的父类别来让程序码具有多型特性,这样的程序码就可以很好具有弹性,改动时要改的地方也比较少了,但要注意子类可以转父类别,父类别却不能转子类别。
>>: 从 IT 技术面细说 Search Console 的 27 组数字 KPI (12) :网页体验 - Core Web Vitals
今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...
在业界蛮多如何成为工程师的课程,至於要不要念本科系,以现今的社会来说不一定是必要条件。相关科系从事相...
从没想过会报名铁人挑战赛,如果不是团队提案想做一款 App 可能一直找不到动力快速推动自己跨领域学习...
凭证请求档制作 本文是在 Windows 环境下操作 下载工程师必备神器 Cmder 最省事,该程序...
山姆再次勇闯黑森林,但是这次他大意了! 在旁埋伏的 Storm 跟 Lightning 趁山姆一不...