王尼玛 发表于 2014-11-26 05:04

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

本帖最后由 王尼玛 于 2014-11-26 05:07 编辑

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

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

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

static void Main(string[] args)
      {
            int pay;//税前工资
            float taxRate = 0.1f;//税率
            float afterTax;//税后工资
            Console.WriteLine("请输入税前工资");
            pay = int.Parse(Console.ReadLine());
            if(pay<=2000)
            {
                afterTax = pay;
            }
            else
            {
                afterTax = pay - (pay - 2000) * taxRate;
            }
            Console.WriteLine("税前工资{0},税后工资{1}", pay, afterTax);
            Console.ReadLine();
      }
运行结果:


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

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

class Pay
    {
      public void Inputpay()
      {
            int pay;//税前工资
            float taxRate = 0.1f;//税率
            float afterTax;//税后工资
            Console.WriteLine("请输入税前工资");
            pay = int.Parse(Console.ReadLine());
            
            //调用方法计算税后工资
            afterTax = GetPay(pay, taxRate);
            Console.WriteLine("税前工资{0},税后工资{1}", pay, afterTax);
      }
      public float GetPay(int pay,float taxRate)
      {
            float afterTax;//计税后的工资
            if(pay<=2000)//低于2000不计税
            {
                afterTax = pay;
            }
            else
            {
                afterTax = pay - (pay - 2000) * taxRate;
            }
            return afterTax;
      }
    }测试代码
static void Main(string[] args)
      {
            Pay pay = new Pay();
            pay.Inputpay();
      }运行结果:

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

public void InputData()
      {
            int num1, num2;
            Console.WriteLine("请输入两个数字");
            num1 = int.Parse(Console.ReadLine());
            num2 = int.Parse(Console.ReadLine());
            Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
            //交换两个数值
            Swap(num1, num2);
            Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
      }
      public void Swap(int num1,int num2)
      {
            int temp;//中间变量
            temp = num1;
            num1 = num2;
            num2 = temp;
      }运行结果:


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

2.按引用传递参数

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

public void InputData()
      {
            int num1, num2;
            Console.WriteLine("请输入两个数字");
            num1 = int.Parse(Console.ReadLine());
            num2 = int.Parse(Console.ReadLine());
            Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
            //交换两个数值
            Swap(ref num1, ref num2);
            Console.WriteLine("交换前两个数分别为:{0}和{1}", num1, num2);
      }
      public void Swap(ref int num1,ref int num2)
      {
            int temp;//中间变量
            temp = num1;
            num1 = num2;
            num2 = temp;
      }运行结果


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


这节课就到这,谢谢大家



Scar-疤痕 发表于 2014-11-26 06:51

楼主辛苦了,一直帮我们这些初学者录制教程!吾爱汇编论坛有你更精彩!

keke120 发表于 2014-11-26 09:25

感谢 楼主的C#教程,简单易懂

bigeorry 发表于 2014-11-26 11:21

楼主厉害。膜拜!

姨妈没我红 发表于 2014-11-26 11:42

对于这些现在还是不懂啊   学习中。。。。

彡墨鱼灬丶 发表于 2014-11-26 12:32

{:5_116:}每次看完后都会懂一点,感谢王尼玛大大的教程

520Kelly 发表于 2014-11-26 13:00

我数学这么差你还叫我算数、、

起凡第一华佗 发表于 2014-11-26 14:16

小弟,大哥来咯{:5_188:}

多多的梦想 发表于 2014-11-29 21:33

来学习了 谢谢
页: [1]
查看完整版本: C#中级开发原创教程第四课-值传递和引用传递