c#基础学习(0724)之可变参数、ref和out

params可变参数,无论有几个参数,必须出现在参数列表的最后,可以为可变参数直接传递一个对应类型的数组

#region 可变参数
//1.如果方法有多个参数,可变参数可以作为最后一个参数
//2.可变参数可以传递参数也可以不传递参数,如果不传递参数,则args数组为一个长度为0的数组
//3.可变参数可以直接传递一个数组进来
static void Test(string msg,params int[] args)
{
  //如果可变参数传值为null时,需要加上判断
  if(args!=null)
  {

  }
}#endregion

static void Main(string[] args){

  //Console.WriteLine("Hello World!");
  //Test("aa", 10, 1, 2, 32, 4, 5, 6);
  //int[] arrInt = new int[] { 1, 2, 3, 4, 5 };
  //Test("xxx");
  //Test("aaaa", arrInt);
  //Test("aaaa", null);
  //Console.ReadKey();
  //Console.WriteLine(""); ;
  //List<string> list = new List<string>();
  //Console.WriteLine("===={0}====",list);
  //Console.ReadKey();

}

ref参数使用方法

//ref仅仅时一个地址,引用传递,可以把值传递强制改为引用传递
//ref:参数在传递之前必须赋值,在方法中可以不为ref参数赋值,可以直接使用
//ref:应用场景内部对外部的值进行改变,out则是内部为外部变量赋值,out一般用在函数有多个返回值的场所
#region ref参数
static void JianJin(ref int m)
{
  m=m+300;
}
static void KouKuan(ref int m)
{
  m=m-300;
}
#endregion

//使用
static void Main(string[] args)
{
  int money=1000;
  JianJin(ref money);
  KouKuan(ref money);
  Console.WriteLine(money);
  Console.ReadKey();
}

out参数使用方法

#region out参数
static void Test1(out int x)
{
  //out参数在使用之前必须在方法里面为out参数赋值
  //out参数无法获取传递进来的变量中的值,只能为传递进来的变量赋值
  //out参数在方法执行完毕之前,必须赋值。

  //Console.WriteLine(x);//报错:使用了未赋值的out参数"x"
  x=100;
  x++;
}
#endregion

//out使用
static void Main(string[] args)
{
  int m=1000;//out方法可以不传值,传了也没用,因为方法里面必须为out参数赋值
  Test1(out m);
  Console.WriteLine(m);
}

out多个参数使用场景

//方法
static int GetAge(out string name,out int height)
{
  name="超哥";
  height=180;
  return 1000;
}

//使用场景,使用ref也可以返回多个值
static void Main(string[] args)
{
  //两个参数可以内联声明
  string n;
  int h;
  int age=GetAge(out n,out h);
  Console.WreteLine(age);
  Console.WriteLine(n);
  Console.WreteLine(h);
  Console.ReadKey();

  #region out使用场景2
  string s="abc";
  int result;
  //将数字的字符串表示形式转换为他的等效32为有符号整数。一个指示转换是否成功的返回值
  bool b=int.TryParse(s,out result);
  if(b)
  {
    Console.WriteLine("转换成功,结果为:{0}",result);
  }
  else
  {
    Console.WriteLine("转换失败,结果为:{0}",s)
  }
  #endregion
}

ref交换两个变量位置

#region 交换两个变量
static void Swap(ref int n1,ref int n2)
{
  int tmp=n1;
  n1=n2;
  n2=tmp;
}
#endregion

static void Main(string[] args)
{
  int m=10,x=20;
  Swap(ref m, ref x);
  Console.WriteLine(m);
  Console.WriteLine(x);
  Console.ReadKey();
}

out用户登录练习

private static bool ValidUserLogin(string uid, string pwd, out string msg)
{
  bool isOk=false;
  if(uid!="admin")
  {
    msg="用户名错误";
  }
  else if(pwd!="888888")
  {
    msg="密码错误";
  }
  else
  {
    isOk=true;
    msg="欢迎用户:"+usd;
  }
  return isOk;
}

//使用
static void Main(string[] args)
{
  #region用户登录练习
  while(true)
  {
    Console.WriteLine("请输入用户名:");
    string uid=Console.ReadLine();
    Console.WriteLine("请输入密码:");
    string pwd=Console.ReadLine();
    string msg;//可以内联声明
    bool isOk=ValidUserLogin(uid,pwd,out msg);
    if(isOk)
    {
      Console.WriteLine("登录成功===={0}",msg);
    }
    else
    {
      Console.WriteLine("登录失败===={0}",msg);
    }
  }
  #endregion
}

原文地址:https://www.cnblogs.com/chao202426/p/9358713.html

时间: 2024-10-16 02:29:17

c#基础学习(0724)之可变参数、ref和out的相关文章

Java基础学习191221(可变参数,数组,Array类,稀疏数组,继承重写多态,抽象类,接口)

Java基础学习 可变参数 在方法声明中,在指定参数类型后加一个省略号(...). 一个方法中只能指定一个可变参数,它必须是方法的最后一个参数.任何普通参数都必须在它之前声明. public class printMax { public static void main(String[] args) { printMax(1,5,8,78,415,15); } public static void printMax( double... numbers){ if (numbers.length

java基础基础总结----- 构造方法,可变参数列表

1 package com.mon11.day2; 2 /** 3 * 类说明 :构造方法,可变参数列表 4 * @author 作者 : chenyanlong 5 * @version 创建时间:2017年11月2日 6 */ 7 class Employee{ 8 private double salary=1800; 9 10 //构造方法 11 public Employee(){ 12 System.out.println("构造方法被调用"); 13 } 14 15 //

Lua学习教程之 可变参数数据打包与解包

利用table的pack与unpack进行数据打包与解包,测试代码如下: print("Test table.pack()----------------"); function printTable ( t ) if type(t) == "table" then for k,v in pairs(t) do printTable(v); end else print(t); end end local packData =function( ... ) loca

Python新手学习基础之函数-可变参数*

可变参数( * ) 可变参数,顾名思义,它的参数是可变的,比如列表.字典等.如果我们需要函数处理可变数量参数的时候,就可以使用可变参数. 我们在查看很多Python源码时,经常会看到 某函数(*参数1, **参数2)这样的函数定义,这个*参数和**参数就是可变参数,一时会让人有点费解.其实只要把函数可变参数的定义搞清楚了,就不难理解了. 当我们不知道需要用几个参数来定义函数的时候,可变参数就可以大展手脚了. 在Python里,带 * 的参数就是用来接受可变数量参数的. 如果一个函数定义如下: d

2017寒假零基础学习Python系列之函数之 函数之定义可变参数

若想让函数接受任意个参数,就可以定义一个可变的参数: def fn(*args): print args fn() >>>() fn(1,2,5,6) >>>(1,2,5,6) 原理是Python解释器把传入的一组参数封装在一个tuple传递给可变参数,因此在函数内部,直接把变量args看成一个tuple就好了,目的是简化调用 小习题:假设我们要计算任意个数的平均值,就可以定义一个可变参数: def average(*args): ... 这样,在调用的时候,可以这样写

黑马程序员_浅谈out参数、ref参数和可变参数

1.out参数 out关键字会导致参数通过引用来传递,通俗点说,就是往外传值的. out参数的作用:用于以内部变量为外部变量赋值的,out一般适用于某个方法不只是使用return返回单个值,而是需要有多个返回值的情况. out参数的使用需要注意以下几点:  1)out参数传递的变量在传递之前不需要对其进行初始化. 分析:在调用方法之前,对out参数传递的变量只需声明,可以赋值也可以不赋值,不过反正都是要在调用时被覆盖掉,所以大可不必赋值,因为赋值了虽然不会报错,但却根本也没有用处,没必要多此一举

c#编程基础之函数可变参数

可变参数:int sum (params int[] values)int sum (string name,params int[] values) 注意:params参数必须是形参表中的最后一个参数. 代码如下: using System; using System.Collections.Generic; using System.Text; namespace 函数可变参数学习 { class Program { static void Main(string[] args) { Say

Python函数基础学习(定义、函数参数、递归函数)

1.本程序是测试函数的基础.函数的参数.递归函数的测试. 函数的参数有: 必选参数.默认参数.可变参数.命名关键字参数和关键字参数 #!/usr/bin/python # -*- coding: utf-8 -*- #当程序存在中文时,注释表明使用utf-8编码解释 #函数学习 print('函数定义') def result(x,n=2): s = 1 while n>0: n = n-1 s = s*x return s #使用def定义一个函数,def 函数名(参数): print(res

Java基础:可变参数(Varagrs)的使用注意事项

因为在先前学习java的过程中,有涉及到可变参数,但没有太深入的去学习.所以最近自己找了些相关资料,想加深了解.下面就是学习整理后的内容了. 在JDK1.5后,定义方法时,可以使用同类型个数不确定的参数. 使用可变参数定义方法时,方法实际上是把这些不确定数目的参数隐式地都装进一个数组中, 然后方法再从这个数组中取出元素来使用. 也就是说,方法使用可变参数,和JDK1.4中方法使用数组参数时的处理方式是一样的,都是取出数组元素来使用. 一.定义方法: 返回值 方法名(参数类型...可变参数名) 1