C#基本语法(高级参数的使用)

◇◆丶佛笑我妖孽 提交于 2021-02-19 11:44:29

C#中有三个高级参数,分别是out,ref,params

out参数

out,用于在方法中返回多余值。(可以理解为让一个方法返回不同的类型值)

我们通过例子来理解例子的功能:用一个方法,判断用户是否登陆成功(布尔类型),同时提示用户是否登陆成功(字符串类型)     

使用:

protected void MyLoginButton_Click(object sender, EventArgs e)
    {
        // 判断是否登陆成功
        string userCode = "";
        string userName = ((ASPxTextBox)Login1.FindControl("UserName")).Text;// 获得 前台空间的用户名值
        string password = ((ASPxTextBox)Login1.FindControl("Password")).Text; // 获得 密码栏的值
        // bool rememberMe = ((CheckBox)Login1.FindControl("RememeberMe")).Checked;
        
       // bool rememberMe = ((CheckBox)Login1.FindControl("RememberMe")).Checked;

        User userService = new User();
        if (!userService.AuthenticateUser(userName, password, out userCode))
        {
            ((Literal)Login1.FindControl("FailureText")).Text = "用户名密码错误 请重试";
            return;
        }
        else
        {
            Session["UserCode"] = userCode;  // 已变成参数的值(userid)
            FormsAuthentication.RedirectFromLoginPage(userCode.ToString(), false);
        }
    }

 传入:

 public bool AuthenticateUser(string username, string password, out string userId)
    {
        DSUsersTableAdapters.UsersTableAdapter helper = new DSUsersTableAdapters.UsersTableAdapter();
        DSUsers.UsersDataTable table = new DSUsers.UsersDataTable();
        
    

        helper.Fill(table, username, password);
        
        if (table.Rows.Count == 0) // 如果查询出来的表行数和为0 证明用户不存在
        {
            
            userId = "";
            return false;
        }
        else
        {
            userId = table.Rows[0]["UserId"].ToString();
            return true;
        }
    }

ref参数

通常我们向方法中传递的是值,方法获得的是这些值的一个拷贝,然后使用这些拷贝,当方法运行完毕后,这些拷贝将被丢弃,而原来的值不会受到影响。 这种情况是通常的,当然还有另外一种情况,我们向方法传递参数的形式,引用(ref)和输出(out)。

有时,我们需要改变原来变量中的值,这是我们可以向方法传递变量引用,而不是变量的值,引用是一个变量,他可以访问原来变量的值,修改引用将修改原来变量的值。变量的值存储在内存中,可以创建一个引用,他指向变量在内存中的位置,当引用被修改时,修改的是内存中的值,因此变量的值可以被修改,当我们调用一个含有引用参数的方法时,方法中的参数将指向被传递给方法的相应变量,因此,我们会明白为什么当修改参数变量的修改也将导致原来变量的值被修改。

创建参数按引用传递的方法,需使用关键字ref,例:

using System;
 
class gump
{
    public double Square(ref double x)
    {
        x = x * x;
        return x;
    }
}
class TestApp
{
    public static void Main()
    {
        gump doit = new gump();
        double a = 3;
        double b = 0;
        Console.WriteLine("Before a={0},b={1}",a,b);
        b = doit.Square(ref a);
        Console.WriteLine("After a={0},b={1}", a, b);
        Console.ReadLine();
    }
}

params参数

params关键字是C#里比较有特点的一个参数,有时候我们调用一个函数可能需要传入不定数量的参数,如果对每一种数量的参数都建立一个重载函数,那么工作量将过于庞大,而如果使用params关键字,则可以让参数数量变成未知,传入的参数会并入一个数组,这样在函数中直接调用该数组中的元素成员就可使用参数了。以下是示例代码:
 

using System;

namespace Params
{
    class Program
    {
        static int SumVals(params int[] vals)
        {
            int sum = 0;

            foreach(int val in vals)
            {
                sum += val;
            }

            return sum;
        }

        static void Main(string[] args)
        {
            int sum = SumVals(1, 5, 2, 9, 8);
            Console.WriteLine("Sum values = {0}", sum);
        }
    }

}

求和函数的输入参数是一个int型数组,如果传入的参数可以不限数量,那么有些用户想要求三个数的和,有些想要用十个,更甚者有些可能想输入一百个数求和,那么params参数可以将求和函数通用化,对这些用户都可用,只要他们直接将想要求和的数字作为参数传入该函数即可。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!