static class Program { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main() { OptertorAdd op = new OptertorAdd(); op.GetResult(1, 2); } } /// <summary> /// 父类 Created:ChenHu date:2013326 /// </summary> public class Opreator { //不想暴漏在外的私有变量可以用属性封装起来 private double _numA; private double _numB; public double NumA { get { return _numA; } set { _numA = value; } } public double NumB { get { return _numB; } set { _numB = value; } } public virtual double GetResult(int a, int b) { double result = 0; //------------------------------------------ //TODO:可以处理需要影藏的逻辑,这也是new或则说虚方法隐藏的逻辑的一种手段,隐藏的逻辑可以是员工的薪资计算等保密操作 //------------------------------------------ result = _numA + _numB; return result; } } /// <summary> /// 派生类 Created:ChenHu date:2013326 /// </summary> class OptertorAdd : Opreator { public override double GetResult(int a, int b) { //这里base的逻辑可以放在自己逻辑之前也可以放在自己逻辑的后面 //这里的位置其实很有讲究哦,逻辑不对可能会引起报错。 //如把base逻辑放在自己逻辑之前,在父类中 _numA + _numB=0;因为你还没赋值 base.GetResult(a, b); NumA = a; NumB = b; double result = 0; result = NumA + NumB; //父类逻辑在此位置 _numA + _numB=3; //base.GetResult(a, b); return result; } } /// <summary> ///首先创建一个工厂,这里我们通过向上转型实现多态 ///这里我们试用静态字段的原因就是: ///这个类可能调用的次数很大,我们最好让其闲在内存加载好 /// </summary> /// <remarks> /// 可以这样理解多态:一个卖猪肉的爹生了好几个儿子(儿子都具有爹的基因此为继承), /// 每个儿子的工作都不一样,有卖西瓜的卖土豆的,这个时候, /// 如果爹想吃西瓜了就会找到卖西瓜的儿子要,如果想吃土豆也是一样的。如果想吃猪肉, /// 但是没有卖肉的儿子怎么办呢? 呵呵 生一个卖猪肉的儿子就行了,虽然有点夸张,但是这是多态的本质。 /// </remarks> public static class OptetaionFactory { /// <summary> /// Frank 2013327 /// </summary> /// <param name="oper">计算符号,根据不同的符号返回不同的计算类实体</param> /// <returns>计算类</returns> public static Opreator OptertCreate(String oper) { Opreator opretaor = null; switch (oper) { case "+": //向上转型:子类->父类 opretaor = new OptertorAdd(); break; //TODO:这里可以根据需要然后从父类派生出更多的子类实例:这就是多态了 } return opretaor; } }
当前名称:继上一篇代码向上转型实现多态
文章源于:https://www.cdcxhl.com/article22/gpdjcc.html
成都网站建设公司_创新互联,为您提供App开发、关键词优化、App设计、动态网站、网站建设、网站营销
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联