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;
}
}
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。