今天先把上几个系列的做一个总结,在这里给出一个面向对象版的简易计算器(重在理解面向对象的思想)。

1.首先定义一个计算器类(类库)(Calculator)

public abstract class Calculator
{
public int Number1
{
get;
set;
}
public int Number2
{
get;
set;
}
//2个构造函数
public Calculator()
{ }
public Calculator(int n1,int n2)
{
this.Number1 = n1;
this.Number2 = n2;
}
public abstract int Jisuan();

这里的Jisuan()方法,因为不知道将来要进行哪种运算,所以设计成抽象方法(此时抽象方法所在的类也必须是抽象的)。具体实现由具体类来重写此方法。

2.接着新建一个类库(加法):

public class AddFa : Calculator
{
public AddFa(int n1,int n2):base(n1,n2)
{ }
public override int Jisuan()
{
return Number1 + Number2;
}
}

它重写了父类Calculator类中的方法Jisuan(),因为父类中有有参数的构造函数,就不用再写了,调用父类的即可(继承的好处).

3.最后调用加法运算时,只需实例化加法类,并调用Jisuan()方法即可实现。(四则运算中的其他类库依次类推)

值类型和引用类型:

所谓值类型就是值存储在栈上的类型。C#中值类型很多:int,float,decimal,double……

引用类型是值存储在堆上,栈上保存的是值在堆中的堆地址,比如:String.

值传递和引用传递;

值类型作为参数传递时,栈上拷贝的是值的一个副本,改变副本的值不影响原内容;

引用类型作为参数传递时,栈上拷贝的是堆地址,改变副本的值影响原内容。(关键字:ref)

注意:out关键字又不同与ref,out要求参数在方法外可以不初始化(不赋值,赋值也没用),在方法内必须对out参数赋值,方法执行完成时,out参数会将值带出来。

最新文章

  1. [Erlang 0128] Term sharing in Erlang/OTP 下篇
  2. angular学习的一些小笔记(中)之ng-disabled轻松实现按钮是否可点击状态
  3. Spring学习之AOP总结帖
  4. 机器学习笔记—Logistic回归
  5. shell判断文件是否存在
  6. Loadrunne实现多个场景运行
  7. java Jsoup 抓取页面数据
  8. system_call的处理过程
  9. 第三周psp
  10. 在eclipse中配置python插件
  11. c#上利用NPlot实现动态曲线图需要的dll文件
  12. MyBatis java and MySql local variables
  13. Android之旅:梦想、学习、坚持、自信、淡定
  14. jquery插件dataTables添加序号列
  15. 小白日记2:kali渗透测试之被动信息收集(一)
  16. 【网络流24题】No.19 负载平衡问题 (费用流)
  17. IIS- ASP站点布署时查看ASP错误信息
  18. uva 1428 - Ping pong
  19. Android平台对H264视频硬解码
  20. Cannot resolve the collation conflict between "SQL_Latin1_General_CP1_CI_AS" and "Chinese_PRC_CI_AS" in the equal to operation.

热门文章

  1. HDU2520 我是菜鸟,我怕谁
  2. js图片实现延迟加载
  3. IIS7 性能(内存、CPU、当前请求耗时)监测
  4. 洛谷P1238 走迷宫
  5. HW4.8
  6. jenkins持续集成配置备忘
  7. Robot Framework自动化测试(二)第一个用例
  8. 来试试这个来自静态代码分析工具PVS Studio提供C++的小测验吧
  9. How to find configuration file MySQL uses?
  10. mysql-gdb--oracle