C#高级参数{out,ref,params}
2017-06-08 11:23
169 查看
转自:http://www.cnblogs.com/linfenghp/p/6618580.html
C#中有三个高级参数,分别是out,ref,params.
out,用于在方法中返回多余值。(可以理解为让一个方法返回不同的类型值),我们通过例子来理解例子的功能:用一个方法,判断用户是否登陆成功(布尔类型),同时提示用户是否登陆成功(字符串类型)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace blog
{
class Program
{
static void Main(string[] args)
{
string str;
Console.WriteLine("请输入用户名");
string uersname = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
//传入参数也一样要在参数前面添加一个out
bool b = login(uersname, password, out str);
if (b)
{
Console.WriteLine(str);
}
else
{
Console.WriteLine(str);
}
Console.ReadKey();
}
public static bool login(string name, string pwd, out string msg)
{
//如果需要返回多个参数,则添加多个参数即可,例如login(string name, string pwd, out string msg,out int num)
//out多余返回值,用于一个方法中多余返回的值,例如这个方法中,
//返回值是布尔类型,同时,还可以返回一个多余的值,msg
//out的参数必须在方法中进行初始化
bool result;
if (name == "admin" && pwd == "123")
{
msg = "登陆成功";
result = true;
}
else
{
msg = "登陆失败";
result = false;
}
return result;
}
}
}
ref关键字用于将方法内的变量改变后带出方法外。具体我们通过例子来说明:
例子中,将变量n1和n2交换了。如果没有加ref参数,由于没有swadDemo()方法没有返回值,调用后,n1和n2是不会交换的,但是加了ref后,变量便会在swadDemo()中改变后并带出。
params,可变参数,使用十分简单,看代码吧。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace blog
{
class Program
{
static void Main(string[] args)
{
int[] a = paramDemo(1,2,3,4);
Console.WriteLine(a.Length);
int[] arr = { 1, 2, 3, 4, 5, 6 };
int[] b = paramDemo(arr);
Console.WriteLine(b.Length);
Console.ReadLine();
}
/// <summary>
/// 可变参数,在参数前面添加params关键字,比如
/// 下面方法是要传入一个int数组类型。那么,加入params后
/// 调用的时候直接传入一个 例如pparamDemo(1,2,3)这样一个 数组也是不会报错的
/// 但是注意参数列表必须是参数的最后一个参数才可以
/// </summary>
/// <param name="arr"></param>
public static int[] paramDemo(params int[] arr)
{
return arr;
}
}
}
C#中有三个高级参数,分别是out,ref,params.
out,用于在方法中返回多余值。(可以理解为让一个方法返回不同的类型值),我们通过例子来理解例子的功能:用一个方法,判断用户是否登陆成功(布尔类型),同时提示用户是否登陆成功(字符串类型)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace blog
{
class Program
{
static void Main(string[] args)
{
string str;
Console.WriteLine("请输入用户名");
string uersname = Console.ReadLine();
Console.WriteLine("请输入密码");
string password = Console.ReadLine();
//传入参数也一样要在参数前面添加一个out
bool b = login(uersname, password, out str);
if (b)
{
Console.WriteLine(str);
}
else
{
Console.WriteLine(str);
}
Console.ReadKey();
}
public static bool login(string name, string pwd, out string msg)
{
//如果需要返回多个参数,则添加多个参数即可,例如login(string name, string pwd, out string msg,out int num)
//out多余返回值,用于一个方法中多余返回的值,例如这个方法中,
//返回值是布尔类型,同时,还可以返回一个多余的值,msg
//out的参数必须在方法中进行初始化
bool result;
if (name == "admin" && pwd == "123")
{
msg = "登陆成功";
result = true;
}
else
{
msg = "登陆失败";
result = false;
}
return result;
}
}
}
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; namespace blog { class Program { static void Main(string[] args) { refDemo(); } #region 使用高级参数ref private static void refDemo() { int n1 = 1; int n2 = 2; swadDemo(ref n1, ref n2); Console.WriteLine("n1:" + n1 + "\r\n" + "n2:" + n2); Console.ReadLine(); } #endregion #region 高级参数ref用法 public static void swadDemo(ref int a, ref int b) { //注意,这个方法中,并没有返回值。但是,由于加了ref, //所以会将变量改变后再带出。 //ref参数,用于将方法内的变量改变后带出方法外 int temp; temp = a; a = b; b = temp; } #endregion } }
params,可变参数,使用十分简单,看代码吧。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace blog
{
class Program
{
static void Main(string[] args)
{
int[] a = paramDemo(1,2,3,4);
Console.WriteLine(a.Length);
int[] arr = { 1, 2, 3, 4, 5, 6 };
int[] b = paramDemo(arr);
Console.WriteLine(b.Length);
Console.ReadLine();
}
/// <summary>
/// 可变参数,在参数前面添加params关键字,比如
/// 下面方法是要传入一个int数组类型。那么,加入params后
/// 调用的时候直接传入一个 例如pparamDemo(1,2,3)这样一个 数组也是不会报错的
/// 但是注意参数列表必须是参数的最后一个参数才可以
/// </summary>
/// <param name="arr"></param>
public static int[] paramDemo(params int[] arr)
{
return arr;
}
}
}
相关文章推荐
- 浅谈c#的三个高级参数ref out 和Params
- 浅谈c#的三个高级参数ref out 和Params
- C#之高级参数 ref,out,params的使用
- c#高级参数关键字out、ref、params
- C#基础(8)——高级参数out、ref、params
- C#中参数修饰符ref和out以及params的区别
- C# ref、out、params与值类型参数修饰符
- C#中的参数修饰符 ref,out ,params
- .net程序员的盲点(一):参数修饰符ref,out ,params的区别
- C# 参考之方法参数关键字:params、ref及out
- c# 参数 params ,ref ,out
- C# 参考之方法参数关键字:params、ref及out
- C# 参考之方法参数关键字:params、ref及out
- C# 参考之方法参数关键字:params、ref及out
- C# 参考之方法参数关键字:params、ref及out
- 用MSIL剥开C#的外衣(一):方法参数ref、out、params和lock、for和foreach关键字
- C#参数类型 params、out和ref
- C# 参考之方法参数关键字:params、ref及out
- 参数修饰符ref,out ,params的区别
- C# 参数-ref 参数、out 参数和 params type[] 参数数列