02.方法的高级参数

out ,ref, params

out的用法

(1)out用于在方法的内部必须为外部的变量赋值.

(2)out一般用于函数需要有多个返回值的场合.

如果在方法中,返回多个相同类型的值的时候,可以考虑返回一个数组.

但是,如果返回多个不同类型的值的时候,返回数组就不行了.这个时候

就可以考虑使用out来实现.

out代码示例:

  1. namespace _03.out的使用
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //写一个方法 求一个数组的最大值,最小值,总和,平均值
  8. int sum;
  9. int avg;
  10. int max;
  11. int min;
  12. int[] intArray = new int[] { 12,15,34,75,45,74,354,6,3,7,1};
  13. Test(intArray, out max, out min, out sum, out avg);
  14. Console.WriteLine("最大值为:{0},最小值为:{1},总和为:{2},平均值为:{3}",max,min,sum,avg);
  15. Console.ReadKey();
  16. }
  17. /// <summary>
  18. /// 计算一个整数数组的最大值,最小值,平均值,总和
  19. /// </summary>
  20. /// <param name="a">需要计算的数组</param>
  21. /// <param name="max">方法会返回的最大值</param>
  22. /// <param name="min">方法会返回的最小值</param>
  23. /// <param name="sum">方法会返回的总和</param>
  24. /// <param name="avg">方法会返回的平均值</param>
  25. public static void Test(int[] a,out int max,out int min,out int sum,out int avg)
  26. {
  27. //out 参数要求,必须在方法中为外部变量赋值
  28. max = a[0]; //假定传进来的数组中第一个元素就是最大值
  29. min = a[0]; //假定传进来的数组中第一个元素就是最小值
  30. sum = 0; //假定和为0
  31. avg = 0; //假定平均值为0
  32. for (int i = 0; i < a.Length; i++)
  33. {
  34. if (a[i] > max)
  35. {
  36. max = a[i];
  37. }
  38. else if (a[i] < min)
  39. {
  40. min = a[i];
  41. }
  42. sum += a[i];
  43. }
  44. avg = sum / a.Length;
  45. }
  46. }
  47. }

out的实际练习01:

  1. namespace _04.out的练习01
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //写一个方法来判断用户输入的是否正确
  8. //返回给用户一个登陆结果,并且还要单独的返回给用户一个登陆信息
  9. //如果用户名错误,除了返回登陆结果之外,还要返回一个"用户名错误"
  10. //如果密码,错误,除了返回登陆结果之外,还要返回一个"密码错误"
  11. string Message = null; //用于接受返回信息
  12. string Login = null; //用于接收登陆结果
  13. Console.WriteLine("请输入有户名:");
  14. string name = Console.ReadLine();
  15. Console.WriteLine("请输入密码:");
  16. string pwd = Console.ReadLine();
  17. Login=PanDuan(name, pwd, out Message); //获取登陆的所有信息
  18. Console.WriteLine("登陆的信息:{0},{1}",Login,Message);
  19. Console.ReadKey();
  20. }
  21. /// <summary>
  22. /// 对用户的用户名和密码进行相应的判断
  23. /// </summary>
  24. /// <param name="name">用户名</param>
  25. /// <param name="pwd">用户密码</param>
  26. /// <param name="Message">登陆的信息</param>
  27. /// <returns>登的状态</returns>
  28. public static string PanDuan(string name,string pwd,out string Message)
  29. {
  30. if (name != "admin")
  31. {
  32. Message = "用户名错误"; //使用out参数,必须在方法体的内部为其赋值
  33. return "登陆失败";
  34. }
  35. else if (pwd != "88888")
  36. {
  37. Message = "密码错误"; //使用out参数,必须在方法体的内部为其赋值
  38. return "登陆失败";
  39. }
  40. else
  41. {
  42. Message = ""; //使用out参数,必须在方法体的内部为其赋值
  43. return "登陆成功";
  44. }
  45. }
  46. }
  47. }

out的实际练习02:

  1. namespace _05.实现MyTryParse的功能
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //TryParse();方法的功能是把string类型转换成想转换的基本类型,如果转换成功,
  8. //将转换的值,赋给后面的参数,并且返回true,如果转换失败,这给后面的参数赋值为0
  9. //并且返回false.
  10. //例如:
  11. //int number=0;
  12. //int.TryParse("222", out number); //如果转换成功,字符串"222"的值将转换成222并赋值给number
  13. //现在实现上述功能
  14. string str = null; //用于接收用户输入的值
  15. int numI = 0; //用于保存转换后的整型值
  16. double numD = 0; //用于保存转换后的双进度型的值
  17. bool b = true; //用于记录是否转换成功
  18. Console.WriteLine("请输入需要转换的数值:");
  19. str=Console.ReadLine();
  20. b = MyTryParse(str, out numD);
  21. Console.WriteLine("是否转换成功:{0},转换后的结果:{1}.",b,numD);
  22. Console.ReadKey();
  23. }/// <summary>
  24. /// 将用户输入的字符型 转换成基本数据类型 int
  25. /// </summary>
  26. /// <param name="str">需要转换的字符串</param>
  27. /// <param name="number">需要转换的字符串</param>
  28. /// <returns>转换是否成功</returns>
  29. public static bool MyTryParse(string str, out int number)
  30. {
  31. try
  32. {
  33. number = int.Parse(str);
  34. return true;
  35. }
  36. catch
  37. {
  38. number = 0;
  39. return false;
  40. }
  41. }
  42. /// <summary>
  43. /// 将用户输入的字符型 转换成基本数据类型 double
  44. /// </summary>
  45. /// <param name="str">需要转换的字符串</param>
  46. /// <param name="number">需要转换的字符串</param>
  47. /// <returns>转换是否成功</returns>
  48. public static bool MyTryParse(string str, out double number)
  49. {
  50. try
  51. {
  52. number = double.Parse(str);
  53. return true;
  54. }
  55. catch
  56. {
  57. number = 0;
  58. return false;
  59. }
  60. }
  61. }
  62. }

ref的用法

能够将一个变量带入到一个方法中进行改变,改变完成之后,再将改变后的值带出方法.

这样一来,我们在将变量通过ref带入到方法之前,必须要为这个变量赋值.

ref的练习1:

  1. namespace _06.ref的使用
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //使用方法来交换两个int类型的变量
  8. int a = 10;
  9. int b = 20;
  10. JiaoHuan(ref a,ref b);
  11. Console.WriteLine("a的值为:{0},b的值为:{1}.",a,b);
  12. Console.ReadKey();
  13. }
  14. /// <summary>
  15. /// 交换两个整型变量
  16. /// </summary>
  17. /// <param name="a">需要交换的数a</param>
  18. /// <param name="b">需要交换的数b</param>
  19. public static void JiaoHuan(ref int a, ref int b) //ref的作用是将有值得变量带入到方法中,进行改变,再将改变后的值带出
  20. {
  21. int temp = 0;
  22. temp = a;
  23. a = b;
  24. b = temp;
  25. }
  26. }
  27. }

params的用法

一个方法可以有多个参数,但是一定要记住使用params修饰的可变参数数组一定放在最后一个位置.

params可变参数:

将实参列表中跟可变参数数组类型一致的元素都当做数组的元素去处理.

Params可变参数的练习1:

  1. namespace _07.Parames可变参数
  2. {
  3. class Program
  4. {
  5. static void Main(string[] args)
  6. {
  7. //需求:
  8. //我们现在要计算期末成绩,可是成绩是一门一门的出来
  9. //可是我现在就要计算现在出来的成绩,但是后面加入的成绩
  10. //以后也要进入计算
  11. //总结:
  12. //这个是时候,我们就不能再使用数组来装成绩了,因为我们
  13. //不确定有几门课成绩需要计算
  14. //就方法而言这个时候,我们就可以使用可变参数来解决这一问题
  15. int sum = 0;
  16. sum=Sum(80, 70, 90, 100);
  17. Console.WriteLine("总成绩为:{0}.",sum);
  18. Console.ReadKey();
  19. }
  20. public static int Sum(params int[]a)
  21. {
  22. int sum = 0; //用来将传进来的成绩求和保存
  23. for (int i = 0; i < a.Length; i++)
  24. {
  25. sum += a[i];
  26. }
  27. return sum;
  28. }
  29. }
  30. }

来自为知笔记(Wiz)

时间: 2024-10-20 00:49:48

02.方法的高级参数的相关文章

黑马程序员-----集合框架类(四) 高级for循环、方法的可变参数及静态导入

1.1 高级for循环(示例1) 格式:for(数据类型 变量名 : 被遍历的集合(Collection)或者数组){ } 对集合进行遍历.只能获取集合元素.但是不能对集合进行操作. 迭代器除了遍历,还可以进行remove集合中元素的动作.如果是用ListIterator,还可以在遍历过程中对集合进行增删改查的动作. 1.1.2 传统for和高级for有什么区别呢? 高级for有一个局限性.必须有被遍历的目标. 1 示例1: 2 import java.util.*; 3 4 class For

C#高级参数ref的使用

ref关键字用于将方法内的变量改变后带出方法外.具体我们通过例子来说明: 例子中,将变量n1和n2交换了.如果没有加ref参数,由于没有swadDemo()方法没有返回值,调用后,n1和n2是不会交换的,但是加了ref后,变量便会在swadDemo()中改变后并带出. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;

SpringMVC学习(六)——SpringMVC高级参数绑定与@RequestMapping注解

高级参数绑定 现在进入SpringMVC高级参数绑定的学习,本文所有案例代码的编写均建立在前文SpringMVC学习(五)——SpringMVC的参数绑定的案例基础之上,因此希望读者能仔细阅读这篇文章. 绑定数组 现有这样一个需求:在商品列表页面选中多个商品,然后删除之.下面是我对该需求的分析:此功能要求商品列表页面中的每个商品前有一个checkbook(复选框),选中多个商品后点击删除按钮把商品id传递给Controller,根据商品id批量删除商品信息. 首先将itemList.jsp页面改

Java基础02 方法与数据成员(转载)

对象中的数据成员表示对象的状态.对象可以执行方法,表示特定的动作. 此外,我们还了解了类(class).同一类的对象属于相同的类型(type).我们可以定义类,并使用该定义来产生对象. 调用同一对象的数据成员 方法可以调用该对象的数据成员.比如下面我们给Human类增加一个getHeight()的方法.该方法返回height数据成员的值: public class Test{    public static void main(String[] args){        Human aPer

浅谈c#的三个高级参数ref out 和Params

c#的三个高级参数ref out 和Params 前言:在我们学习c#基础的时候,我们会学习到c#的三个高级的参数,分别是out .ref 和Params,在这里我们来分别的讲解一下,在这里的我们先不做具体的解释,我会通过几个例子来做分别的解释. 一:out参数  1.首先我先给大家一个题:我们来写一个方法,来求一个数组中的最大值,最小值,总和,平均值.代码如下:  int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };  通过分析我们会发现如果我们写一个方

jquery ajax 方法及各参数详解

jquery ajax 方法及各参数详解 1.$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息. 参数列表: 参数名 类型 描述 url String (默认: 当前页地址) 发送请求的地址. type String (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET".注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分

三个案例带你看懂LayoutInflater中inflate方法两个参数和三个参数的区别

版权声明:本文为sang原创文章,转载请注明出处. 目录(?)[+] 关于inflate参数问题,我想很多人多多少少都了解一点,网上也有很多关于这方面介绍的文章,但是枯燥的理论或者翻译让很多小伙伴看完之后还是一脸懵逼,so,我今天想通过三个案例来让小伙伴彻底的搞清楚这个东东.本篇博客我们不讲源码,只看使用.源码的解读会在下一篇博文中带来. inflate方法从大范围来看,分两种,三个参数的构造方法和两个参数的构造方法.在这两类中又有细分,OK,那我们就把各种情况都来演示一遍. 1.三个参数的in

Spring MVC 之请求处理方法可接收参数(二)

请求处理方法可接收参数 今天学习了前三个方法. 1.作用域对象2.单个表单提交数据3.表单数据封装的Bean对象 首先创建一个实体对象. 1 package com.cy.springannotation.entity; 2 /** 3 * 定义一个表单实体类 4 * @author acer 5 * 6 */ 7 public class UserBean { 8 //要求属性名必须要和表单的参数名一样的! 9 private String username; 10 private Strin

工作随笔——Java调用Groovy类的方法、传递参数和获取返回值

接触Groovy也快一年了,一直在尝试怎么将Groovy引用到日常工作中来.最近在做一个功能的时候,花了点时间重新看了下Java怎么调用Groovy的方法.传递参数和获取返回值. 示例Groovy代码如下: # TestGroovy.groovy 定义testC方法,传入3个参数,返回处理后的数据 def testC(int numA, int numB, int numC) { "传入参数:" + numA + numB + numC + "计算之和为:" + (