c#方法参数

C#语言的方法可以使用如下四种参数(请注意和参数类型的区别):

l         值参数,不含任何修饰符。

l         引用参数,以ref修饰符声明。

l         输出参数,以out修饰符声明。

l         数组参数,以params修饰符声明。

1.  值参数

当用值参数向方法传递参数时,程序给实参的值做一份拷贝,并且将此拷贝传递给该方法,被调用的方法不会修改实参的值,所以使用值参数时,可以保证实参的值是安全的。如果参数类型是引用类型,例如是类的引用变量,则拷贝中存储的也是对象的引用,所以拷贝和实参引用同一个对象,通过这个拷贝,可以修改实参所引用的对象中的数据成员。

2.  引用参数

有时在方法中,需要修改或得到方法外部的变量值,C语言用向方法传递实参指针来达到目的,C#语言用引用参数。当用引用参数向方法传递实参时,程序将把实参的引用,即实参在内存中的地址传递给方法,方法通过实参的引用,修改或得到方法外部的变量值。引用参数以ref修饰符声明。注意在使用前,实参变量要求必须被设置初始值。

3.  输出参数

为了把方法的运算结果保存到外部变量,因此需要知道外部变量的引用(地址)。输出参数用于向方法传递外部变量引用(地址),所以输出参数也是引用参数,与引用参数的差别在于调用方法前无需对变量进行初始化。在方法返回后,传递的变量被认为经过了初始化。值参数、引用参数和输出参数的使用见下例:

using System;

class g{public int a=0;}//类定义

class Class1

{   public static void F1(ref char i)//引用参数

    {   i='b';}

    public static void F2(char i)//值参数,参数类型为值类型

    {   i='d';}

    public static void F3(out char i)//输出参数

    {   i='e';}

public static void F4(string s)//值参数,参数类型为字符串

    {   s="xyz";}

    public static void F5(g gg)//值参数,参数类型为引用类型

    {   gg.a=20;}

public static void F6(ref string s)//引用参数,参数类型为字符串

    {   s="xyz";}

    static void Main(string[] args)

    {   char a='c';

        string s1="abc";

        F2(a);//值参数,不能修改外部的a

        Console.WriteLine(a);//因a未被修改,显示c

        F1(ref a);//引用参数,函数修改外部的a的值

        Console.WriteLine(a);//a被修改为b,显示b

        Char j;

        F3(out j);//输出参数,结果输出到外部变量j

        Console.WriteLine(j);//显示e

        F4(s1);//值参数,参数类型是字符串,s1为字符串引用变量

        Console.WriteLine(s1);//显示:abc,字符串s1不被修改

        g g1=new g();

        F5(g1);//值参数,但实参是一个类引用类型变量

        Console.WriteLine(g1.a.ToString());//显示:20,修改对象数据

        F6(ref s1);//引用参数,参数类型是字符串,s1为字符串引用变量

        Console.WriteLine(s1);//显示:xyz,字符串s1被修改

    }

}

4.  数组参数

数组参数使用params说明,如果形参表中包含了数组参数,那么它必须是参数表中最后一个参数,数组参数只允许是一维数组。比如string[]和string[][]类型都可以作为数组型参数。最后,数组型参数不能再有ref和out修饰符。见下例:

using System;

class Class1

{   static void F(params int[] args)//数组参数,有params说明

    {   Console.Write("Array contains {0} elements:",args.Length);

        foreach (int i in args)

Console.Write(" {0}",i);

        Console.WriteLine();

    }

    static void Main(string[] args)

    {   int[] a = {1,2,3};

        F(a);//实参为数组类引用变量a

        F(10, 20, 30, 40);//等价于F(new int[] {60,70,80,90});

        F(new int[] {60,70,80,90});//实参为数组类引用

        F();//等价于F(new int[] {});

        F(new int[] {});//实参为数组类引用,数组无元素

    }

}

程序输出

Array contains 3 elements: 1 2 3

Array contains 4 elements: 10 20 30 40

Array contains 4 elements: 60,70,80,90

Array contains 0 elements:

Array contains 0 elements:

    方法的参数为数组时也可以不使用params,此种方法可以使用一维或多维数组,见下例:

using System;

class Class1

{   static void F(int[,] args)//值参数,参数类型为数组类引用变量,无params说明

    {   Console.Write("Array contains {0} elements:",args.Length);

        foreach (int i in args)

Console.Write(" {0}",i);

        Console.WriteLine();

    }

    static void Main(string[] args)

    {   int[,] a = {{1,2,3},{4,5,6}};

        F(a);//实参为数组类引用变量a

        //F(10, 20, 30, 40);//此格式不能使用

        F(new int[,] {{60,70},{80,90}});//实参为数组类引用

        //F();//此格式不能使用

        //F(new int[,] {});//此格式不能使用

    }

}

程序输出

Array contains 3 elements: 1 2 3 4 5 6

Array contains 4 elements: 60,70,80,90

posted on 2012-03-18 21:02 青蛙學堂 阅读(534) 评论(0)  编辑 收藏 引用 所属分类: 軟件布袋Vs2008

只有注册用户登录后才能发表评论。
<2005年11月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

导航

统计

常用链接

留言簿(8)

随笔分类

随笔档案

收藏夹

青蛙学堂

最新评论

阅读排行榜

评论排行榜