Day 10. 新手也能懂的物件导向 part 2

上一篇讲了一部分物件导向的特性,今天要来讲多型,在此之前要先介绍介面(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,也可以看它是否有继承关系,透过先抽取出共同逻辑的父类别来让程序码具有多型特性,这样的程序码就可以很好具有弹性,改动时要改的地方也比较少了,但要注意子类可以转父类别,父类别却不能转子类别。


<<:  Day 0x2 - 环境准备与建立

>>:  从 IT 技术面细说 Search Console 的 27 组数字 KPI (12) :网页体验 - Core Web Vitals

Day 12 Compose UI Dialog

今年的疫情蛮严重的,希望大家都过得安好,希望疫情快点过去,能回到一些线下技术聚会的时光~ 今天目标:...

我想当工程师!要念资讯相关科系吗?

在业界蛮多如何成为工程师的课程,至於要不要念本科系,以现今的社会来说不一定是必要条件。相关科系从事相...

挑战 30 日心得纪录

从没想过会报名铁人挑战赛,如果不是团队提案想做一款 App 可能一直找不到动力快速推动自己跨领域学习...

SSL 凭证制作与汇入

凭证请求档制作 本文是在 Windows 环境下操作 下载工程师必备神器 Cmder 最省事,该程序...

从零开始的8-bit迷宫探险【Level 25】今天又是崭新的一天,回到原点

山姆再次勇闯黑森林,但是这次他大意了! 在旁埋伏的 Storm 跟 Lightning 趁山姆一不...