zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    第27课二阶构造模式(上)---------出现的背景
    第26课 静态成员函数
    第25课类的静态成员变量
    第24课经典问题解析(下)--------类的成员函数和成员变量隶属某个具体对象吗
    第24课经典问题(中)-----关于const对象的疑问
    第24课经典的问题(上)---------对象的构造顺序与析构顺序
    第23课 神秘的临时对象
    断剑重铸007
    DG on Windows 10 S: 执行任意代码
    断剑重铸006
  • 原文地址:https://www.cnblogs.com/chao202426/p/9358713.html
Copyright © 2011-2022 走看看