C#——函数的参数

原创 2012年03月21日 20:44:09

函数的参数

 

(一)函数的ref、out参数

函数参数默认是值传递的,也就是“复制一份”,也就是“复制一份”,例子:

int age=20;

IncAge(age);

Console.WriteLine("age={0},age");

ref必须先初始化,因为是引用,所以必须先“有”,才能引用,而out则是内部为外部赋值,所以不需要初始化,而且外部初始化也没用。

ref应用场景内部对外部的值进行改变out则是内部为外部变量赋值out一般用在函数有多个返回值的场所

例1:函数参数默认是值传递的,也就是“复制一份”,

namespace refout参数
{
    class Program
    {
        static void Main(string[] args)
        {
            int age = 20;
            IncAge(age);
            Console.WriteLine(age); //20
            Console.ReadKey();
        }
        static void IncAge(int age) //复制了一份,所以IncAge内部改变的是副本。
        {
            age++;
        }
    }
}

 

例2:参数前加ref,因为是引用,外部参数必须先要初始化。

namespace ref参数
{
    class Program
    {
        static void Main(string[] args)
        {
            int age = 20;               //ref是引用,外部参数必须先要初始化(赋值)
            IncAge(ref age);
            Console.WriteLine(age);     //21
            Console.ReadKey();
        }
        static void IncAge(ref int age) //ref:内部对外部参数的改变
        {
            age++;
        }
    }
}


 

例3:out:内部为外部变量赋值,内部参数要赋值,外部参数不需要初始化,而且外部初始化也没用.。

namespace out参数
{
    class Program
    {
        static void Main(string[] args)
        {
            //int age = 20;     //out外部参数不需要初始化,而且外部初始化也没用.
            int age;
            IncAge(out age);
            Console.WriteLine(age);        //31
            Console.ReadKey();
        }
        static void IncAge(out int age)    //out:内部为外部变量赋值
        {
            age = 30;          //out内部参数要赋值
            age++;
        }
    }
}


例4:交换两个变量的值

namespace ref应用场景
{
    class Program
    {
        static void Main(string[] args)
        {
            int i1 = 10;
            int i2 = 20;
            Swap(ref i1, ref i2);
            Console.WriteLine("i1={0},i2={1}", i1, i2);
            Console.ReadKey();
        }
        //两个变量的交换
        static void Swap(ref int i1, ref int i2)  //内部的改变用ref
        {
            int temp = i1;
            i1 = i2;
            i2 = temp;
        }
    }
}


ref应用场景:内部对外部的值进行改变ref应用场景:内部对外部的值进行改变ref应用场景:内部对外部的值进行改变ref的应用场景:内部对外部的值进行改变

例5:数字型的字符串转变为数据类型的数字

namespace out应用场景
{
    class Program
    {
        static void Main(string[] args)
        {
            string str = Console.ReadLine();
            int i;
            if (int.TryParse(str, out i))  //一般一个函数只能有一个返回值,若一个函数要有多个返回值,要用out
            {
                Console.WriteLine("转换成功!{0}", i);
            }
            else
            {
                Console.WriteLine("数据错误");
            }
            Console.ReadKey();
        }
    }
}


一般一个函数只能有一个返回值若一个函数要有多个返回值,要用out,这就是out的应用场景。        

 二、函数的可变参数 ——params

可变参数:参数的个数可以动态增加的,在参数前面加params关键字。

此部分的内容在我的博客:《C#——函数》中的部分函数的参数有详细的说明,在此不再赘述。

 

其博客的链接: <http://blog.csdn.net/haiyan_cf/article/details/7358031>

 

最后,函数参数的总结:

 

确定函数参数的原则自己能确定的数据自己内部解决,自己确定不了的数据通过参数传递。

C#中函数的参数前可加关键字(ref,out,params),也可以不加关键字(称为“默认参数”)。

 

函数参数默认是值传递的,也就是“复制一份”。

 

参数前加ref ,out和params 的区别:

 

区  别:

params 关键字是可变参数的标志,参数的个数可以动态增加的

out内参赋值,out一般用在函数有多个返回值的场所

ref外参赋值,内部对外部的值进行改变

相同点:

外部和内部参数前要同时加、减 ref、out,前后要保持一致性。

 

 

 

 

 

 

C#如何实现不定参数个数的函数

一般的方法可以自己写多重载的方法来适应不同的参数(一般也是这样做的);  如果你实在觉得有很多不确定个数的参数可能会用时  那么你可以用一个数组来存放这些参数(相同数据类型的参数);  当然如果...
  • CsethCRM
  • CsethCRM
  • 2013年07月04日 09:09
  • 1062

C#之委托(函数参数传递)

在学委托这块儿的时候,函数参数这块不是很理解,于是针对一个例子做了深入的理解,和大家分享一下。         首先,先说一下我对委托的理解,委托就是一个可以执行多种同类功能的变量,之所以它是执行同类...
  • wangdan199112
  • wangdan199112
  • 2014年01月26日 17:03
  • 6836

[c#]基类中不包含0个参数的构造函数

由于好久没摸代码了 最近忙着找工作又重新写点基础的代码以备不时之需 今天在写代码写到关于派生类的问题上就突然出现了如标题的问题 一开始我是这样写的 然后就报了这个问题,我大概查了点资料‘ ...
  • zhiyuan_lu
  • zhiyuan_lu
  • 2016年01月05日 19:46
  • 1290

C#中的函数指针(转)

函数指针也叫指向函数的指针,它是为了提高函数的通用性而引入的。比较传统的方法是在函数中增加参数,通过增加的参数来判断到底要用什么函数,这样的缺点是灵活性差,为了支持多种方法要在函数中要写很多分支判断语...
  • dragoo1
  • dragoo1
  • 2016年11月05日 11:00
  • 2288

3.4.1.1 在 C# 中传递函数作为参数值

3.4.1 处理数字列表 假设我们想写一个类似于 SumList 的方法,但是把加法改成乘法。这个修改看起来很简单:可以复制 SumList 方法,然后进行修改。其中只有两个变化: ...
  • hadstj
  • hadstj
  • 2014年09月28日 17:59
  • 3482

c# 多线程 调用带参数函数

[csharp] view plaincopy   线程操作主要用到Thread类,他是定义在System.Threading.dll下。使用时需要添加这一个引用。该类提...
  • SunCherryDream
  • SunCherryDream
  • 2015年07月25日 16:32
  • 1265

C# 函数中的out型参数

首先,在函数的参数参数列表中,out关键字一定要放在类型前面。否则,会产生几个编译时错误。 第二,在函数的声明时和调用中,都要加out关键字。 Eg: namespace Polym...
  • u012252959
  • u012252959
  • 2015年12月07日 11:18
  • 2695

c#编写参数不固定的函数实例

public static DataSet dboperation(params object[] args)         {             DataSet ds = null; ...
  • angel20082008
  • angel20082008
  • 2014年12月27日 14:50
  • 1561

C#利用反射动态创建对象 带参数的构造函数和String类型

最近笔者有一个想法需要利用反射动态创建对象(如string,int,float,bool,以及自定义类等)来实现,一直感觉反射用不好,特别是当构造函数带参数的时候。 MSDN上给出的例子十分复杂,网...
  • hemeinvyiqiluoben
  • hemeinvyiqiluoben
  • 2015年12月23日 10:26
  • 5585

out输出参数(C#)

很多情况下,被调用方法获得变量实参之后,很大程度上需要对此变量先进行读取。所以在我们将参数传递给调用方法前必须先变量进行赋值。 但是否存在这么一种情况,被调用方法不需要预先读取变量值,而是只需要对其进...
  • u010792238
  • u010792238
  • 2016年03月04日 23:44
  • 1190
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#——函数的参数
举报原因:
原因补充:

(最多只允许输入30个字)