吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 2268|回复: 8

[C#] C#中级开发原创教程第四课-值传递和引用传递

[复制链接]
王尼玛 发表于 2014-11-26 05:04 | 显示全部楼层 |阅读模式

本帖最后由 王尼玛 于 2014-11-26 05:07 编辑
大家好,我是王尼玛。今天起我给大家讲解C#中级开发教程,本次是第四课。大家在课后有什么疑问可以跟帖留言,我会尽我所能来解答。毕竟众口难调,大家有什么建议也可以跟帖告诉我。
此教程为本人原创,转载请注明"吾爱汇编论坛王尼玛原创"
好了,废话不多说,开始今天的学习.

有朋友说不太明白我写的教程,其实编程这东西很简单,一个字,练!你光看我写的多半是一头雾水,因为你没实际跟着我讲的代码去操作,你要跟着我的代码敲,多敲代码,多练习我给的例子,再配合我例子后面的讲解,自然就明白我讲的是什么了.还不明白?跟帖问吧

1.值传递

问题:
王尼美同学在完成软件开发的课程后,到一家软件公司面试程序员
老板告诉她税前工资,工资计税的方法为:
收入小于2000元不计税,超过2000元按10%缴税,王尼美编写了如下程序计算自己的税后工资


  1. static void Main(string[] args)
  2.         {
  3.             int pay;//税前工资
  4.             float taxRate = 0.1f;//税率
  5.             float afterTax;//税后工资
  6.             Console.WriteLine("请输入税前工资");
  7.             pay = int.Parse(Console.ReadLine());
  8.             if(pay<=2000)
  9.             {
  10.                 afterTax = pay;
  11.             }
  12.             else
  13.             {
  14.                 afterTax = pay - (pay - 2000) * taxRate;
  15.             }
  16.             Console.WriteLine("税前工资{0},税后工资{1}", pay, afterTax);
  17.             Console.ReadLine();
  18.         }
复制代码

运行结果:
1.png

王尼美同学很快完成了程序,交给老板.此时,老板又提出新的问题
如果经过几年后工资计税方法改变,超出2000的部分按15%缴税,该怎么办呢


分析:
经过思考,王尼美同学决定采用自定义方法来实现老板提出的新要求
自定义方法的名称为Getpay();将税前工资和税率作为该方法的参数传入
将税后工资作为该方法的返回值


  1. class Pay
  2.     {
  3.         public void Inputpay()
  4.         {
  5.             int pay;//税前工资
  6.             float taxRate = 0.1f;//税率
  7.             float afterTax;//税后工资
  8.             Console.WriteLine("请输入税前工资");
  9.             pay = int.Parse(Console.ReadLine());
  10.             
  11.             //调用方法计算税后工资
  12.             afterTax = GetPay(pay, taxRate);
  13.             Console.WriteLine("税前工资{0},税后工资{1}", pay, afterTax);
  14.         }
  15.         public float GetPay(int pay,float taxRate)
  16.         {
  17.             float afterTax;//计税后的工资
  18.             if(pay<=2000)//低于2000不计税
  19.             {
  20.                 afterTax = pay;
  21.             }
  22.             else
  23.             {
  24.                 afterTax = pay - (pay - 2000) * taxRate;
  25.             }
  26.             return afterTax;
  27.         }
  28.     }
复制代码
测试代码
  1. static void Main(string[] args)
  2.         {
  3.             Pay pay = new Pay();
  4.             pay.Inputpay();
  5.         }
复制代码
运行结果: 2.png

问题:
如何用自定义方法交换两个数字的值,并输出这两个交换后的数?
王尼美编写了如下所示代码来解决这个问题,请你看看她的代码是否能完成老板提出的需求


  1. public void InputData()
  2.         {
  3.             int num1, num2;
  4.             Console.WriteLine("请输入两个数字");
  5.             num1 = int.Parse(Console.ReadLine());
  6.             num2 = int.Parse(Console.ReadLine());
  7.             Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
  8.             //交换两个数值
  9.             Swap(num1, num2);
  10.             Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
  11.         }
  12.         public void Swap(int num1,int num2)
  13.         {
  14.             int temp;//中间变量
  15.             temp = num1;
  16.             num1 = num2;
  17.             num2 = temp;
  18.         }
复制代码
运行结果:
3.png

分析运行结果会发现,方法调用后,两个数的值并没有交换,这是为什么?
因为在为方法传递参数时使用了值传递
什么是值传递?
上面的Swap就是只把参数的值传到方法里面
如果在被调用的方法中对参数的值进行了修改,在方法调用后,参数仍然是原来的值
那么,有什么方式能够在方法调用后对参数值进行修改呢?
这就需要按引用传递参数


2.按引用传递参数

方法中数据的传递除了值传递外,还可以按引用传递参数
利用按引用传递参数的方式可以在方法调用之后,仍然保留对参数值的修改
要想使参数按引用传递,需要使用ref关键字来修饰参数


  1. public void InputData()
  2.         {
  3.             int num1, num2;
  4.             Console.WriteLine("请输入两个数字");
  5.             num1 = int.Parse(Console.ReadLine());
  6.             num2 = int.Parse(Console.ReadLine());
  7.             Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
  8.             //交换两个数值
  9.             Swap(ref num1, ref num2);
  10.             Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
  11.         }
  12.         public void Swap(ref int num1,ref int num2)
  13.         {
  14.             int temp;//中间变量
  15.             temp = num1;
  16.             num1 = num2;
  17.             num2 = temp;
  18.         }
复制代码
运行结果
4.png

现在你了解了值传递和引用传递的区别了吧?


这节课就到这,谢谢大家



评分

参与人数 12HB +29 THX +11 收起 理由
消逝的过去 + 1
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-学破解防破解,知进攻懂防守!
agan8888 + 1
EMT + 1 + 1
ding520 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
playboy + 1
597444660 + 1 [快捷评语] - 评分=感恩!简单却充满爱!感谢您的作品!
雾里看花 + 3 + 1 评分=感恩!简单却充满爱!感谢您的作品!
彡墨鱼灬丶 + 5 + 1 你将受到所有人的崇拜!
bigeorry + 5 + 1 论坛有你更精彩!感谢楼主!
yAxI丶9y + 11 + 1 感谢师父出教程。
Scar-疤痕 + 3 + 1 积极评分从我做起,感谢!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
Scar-疤痕 发表于 2014-11-26 06:51 | 显示全部楼层

楼主辛苦了,一直帮我们这些初学者录制教程!吾爱汇编论坛有你更精彩!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
keke120 发表于 2014-11-26 09:25 | 显示全部楼层

感谢 楼主的C#教程,简单易懂
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
bigeorry 发表于 2014-11-26 11:21 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
姨妈没我红 发表于 2014-11-26 11:42 | 显示全部楼层

对于这些现在还是不懂啊   学习中。。。。
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
彡墨鱼灬丶 发表于 2014-11-26 12:32 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
520Kelly 发表于 2014-11-26 13:00 | 显示全部楼层

我数学这么差你还叫我算数、、
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
起凡第一华佗 发表于 2014-11-26 14:16 | 显示全部楼层

小弟,大哥来咯
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
多多的梦想 发表于 2014-11-29 21:33 | 显示全部楼层

来学习了 谢谢
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表