美文网首页
游戏之路语言篇之函数(方法)--008

游戏之路语言篇之函数(方法)--008

作者: HeavenOrSky | 来源:发表于2019-04-09 15:39 被阅读0次

老酷:小奇,写一个方法,传入两个整数,交换两个整数的值!
小奇:老酷,这么简答的方法,你是不是看不起我?
老酷:你还真不一定写对,真不是我看不起你!
(不到一分钟)
小奇:老酷你看!

        static void Swap(int num1,int num2)
        {
            int temp = num1;
            num1 = num2;
            num2 = temp;
            Console.WriteLine("num1={0},num2={1}",num1,num2);
        }

老酷:首先看上去你的代码很好,就是的打印数据的位置有点不好,此方法的功能是交换两个整型变量的值。而你这个方法还有打印的功能,所以你这方法不是很好的方法。
小奇:简单啊!删除了最后一行就可以了。
老酷:恩!你删除然后你展示给我看你的代码及运行结果!
小奇:

        static void Main(string[] args)
        {
            int number1 = 20;
            int number2 = 60;
            Swap(number1, number1);

            Console.WriteLine("num1={0},num2={1}", number1, number2);
        }

        static void Swap(int num1,int num2)
        {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
运行结果

老子眼花了?不能够吧?
老酷:噗嗤!(憋不住了)
小奇:你做了什么手脚了么?你这老头很坏!
老酷:我能做什么手脚?从头到位都是你在写,我都没有碰你代码!
小奇:你是不是第一次看到我代码的时候就知道出问题了!
老酷:是你没有写代码的时候!
小奇:为什么?
老酷:昨天我说过一句话,方法调用的过程就是实参传递给形参的过程。也就是赋值的过程。当你将实参number1赋值给形参num1,实参number2赋值给形参num2的之后,num1和num2确实发生了交换但是没有影响到number1和number2.因此你的交换不成功。
小奇:那我要想交换成功怎么办?
老酷:那么你就将num1和number1强行绑定在一起,num2和number2强行绑定在一起。也就是说num1和num2交换,number1就必须和number2交换。
小奇:怎么操作?
老酷:我要秀操作!让位!!

        static void Main(string[] args)
        {
            int number1 = 20;
            int number2 = 60;
            Swap(ref number1,ref number1);

            Console.WriteLine("num1={0},num2={1}", number1, number2);
        }
        static void Swap(ref int num1,ref int num2)
        {
            int temp = num1;
            num1 = num2;
            num2 = temp;
        }
运行结果

小奇:果然可以。
老酷:你就先这样理解吧!本质上是将实参在内存栈中存放的地址做了交换。以后你会慢慢理解的。
小奇:学习都是有沉淀期的。这个我懂。
老酷:ref是有传入有带出的。但是在c#中还有一种输出参数--out。
小奇:out ,简单明了。
老酷:out关键字我们可以把它理解成为一个摆渡人。它的工作就是将参数从方法中带出来。虽然return也可以,但是return每次只能返回一个,而out可以返回多个。
小奇:如果我们返回多个,可以凡在一个数组中呀!
老酷:你这种思路是不错的。但是数组中的每一个位置对应的元素是什么意思,相对来说就不是那么清晰了。除非我们写了注释,就算写了注释我们还得每次打开去看。比如我们将一个秒数转化成小时、分钟、秒那么我们使用数组返回的话就需要记住第一个元素是小时,第二个是分钟,第三个是秒数。如果我们使用out 关键字带出,那么我们通过参数就可以区分。

        static void Main(string[] args)
        {
            int h;
            int m;
            int s;
            CalculateTime(3667,out h,out m,out s);
            Console.WriteLine("{0}小时{1}分钟{2}秒",h,m,s);
        }


        static void CalculateTime(int totalSeconds, out int hours, out int minutes,out int seconds)
        {
            hours = totalSeconds / (60 * 60);
            minutes = totalSeconds % (60 * 60) / 60;
            seconds = totalSeconds % 60;
        }
运行结果

小奇:确实很方便,一下带出三个值。
老酷:输出参数要在必选参数之后。这个你一定要记住。
小奇:方法水很深。处处要留心 。
老酷:数量就好了。你自己玩代码吧!

相关文章

网友评论

      本文标题:游戏之路语言篇之函数(方法)--008

      本文链接:https://www.haomeiwen.com/subject/gllfiqtx.html