继前一篇代码通过向上转型实现多态
2013-03-27 11:26 Chan08 阅读(160) 评论(0) 编辑 收藏 举报1 static class Program 2 { 3 /// <summary> 4 /// 应用程序的主入口点。 5 /// </summary> 6 [STAThread] 7 static void Main() 8 { 9 OptertorAdd op = new OptertorAdd(); 10 op.GetResult(1, 2); 11 } 12 } 13 14 /// <summary> 15 /// 父类 Created:ChenHu date:2013326 16 /// </summary> 17 public class Opreator 18 { 19 //不想暴漏在外的私有变量可以用属性封装起来 20 private double _numA; 21 private double _numB; 22 23 public double NumA 24 { 25 get { return _numA; } 26 set { _numA = value; } 27 } 28 29 public double NumB 30 { 31 get { return _numB; } 32 set { _numB = value; } 33 } 34 35 public virtual double GetResult(int a, int b) 36 { 37 double result = 0; 38 //------------------------------------------ 39 //TODO:可以处理需要影藏的逻辑,这也是new或则说虚方法隐藏的逻辑的一种手段,隐藏的逻辑可以是员工的薪资计算等保密操作 40 //------------------------------------------ 41 result = _numA + _numB; 42 return result; 43 } 44 } 45 46 /// <summary> 47 /// 派生类 Created:ChenHu date:2013326 48 /// </summary> 49 class OptertorAdd : Opreator 50 { 51 public override double GetResult(int a, int b) 52 { 53 //这里base的逻辑可以放在自己逻辑之前也可以放在自己逻辑的后面 54 //这里的位置其实很有讲究哦,逻辑不对可能会引起报错。 55 //如把base逻辑放在自己逻辑之前,在父类中 _numA + _numB=0;因为你还没赋值 56 base.GetResult(a, b); 57 NumA = a; 58 NumB = b; 59 double result = 0; 60 result = NumA + NumB; 61 //父类逻辑在此位置 _numA + _numB=3; 62 //base.GetResult(a, b); 63 return result; 64 65 } 66 } 67 68 69 /// <summary> 70 ///首先创建一个工厂,这里我们通过向上转型实现多态 71 ///这里我们试用静态字段的原因就是: 72 ///这个类可能调用的次数很大,我们最好让其闲在内存加载好 73 /// </summary> 74 /// <remarks> 75 /// 可以这样理解多态:一个卖猪肉的爹生了好几个儿子(儿子都具有爹的基因此为继承), 76 /// 每个儿子的工作都不一样,有卖西瓜的卖土豆的,这个时候, 77 /// 如果爹想吃西瓜了就会找到卖西瓜的儿子要,如果想吃土豆也是一样的。如果想吃猪肉, 78 /// 但是没有卖肉的儿子怎么办呢? 呵呵 生一个卖猪肉的儿子就行了,虽然有点夸张,但是这是多态的本质。 79 /// </remarks> 80 public static class OptetaionFactory 81 { 82 /// <summary> 83 /// Frank 2013327 84 /// </summary> 85 /// <param name="oper">计算符号,根据不同的符号返回不同的计算类实体</param> 86 /// <returns>计算类</returns> 87 public static Opreator OptertCreate(String oper) 88 { 89 Opreator opretaor = null; 90 switch (oper) 91 { 92 case "+": 93 //向上转型:子类->父类 94 opretaor = new OptertorAdd(); 95 break; 96 //TODO:这里可以根据需要然后从父类派生出更多的子类实例:这就是多态了 97 } 98 return opretaor; 99 } 100 }