首页 > 编程笔记 > C#笔记 阅读:22

C#方法的声明和使用(附带实例)

C# 中的方法是用来定义类可执行的操作,它是包含一系列语句的代码块。从本质上讲,方法就是和类相关联的动作。

C#方法的声明

方法在类或结构中声明,声明时需要指定访问级别、返回值、方法名称及方法参数,方法参数放在括号中,并用逗号隔开。括号中没有内容表示声明的方法没有参数。

声明方法的基本格式如下:
修饰符 返回值类型 方法名称(参数列表)
{
    //方法的具体实现;
}

一个方法的名称和参数列表定义了该方法的签名,具体地讲,一个方法的签名由它的名称及参数的个数、修饰符和类型组成。返回值类型不是方法签名的组成部分,参数的名称也不是方法签名的组成部分。

例如,定义一个 ShowGoods() 方法,用来输出库存商品的信息,代码如下:
public void ShowGoods()
{
    Console.WriteLine("库存商品名称: ");
    Console.WriteLine(FullName);
}

注意,方法的定义必须在某个类中,定义方法时如果没有声明访问修饰符,方法的默认访问权限为 private。


如果定义的方法有返回值,则必须使用 return 关键字返回一个指定类型的数据。例如,定义一个返回值类型为 int 的方法,就必须使用 return 返回一个 int 类型的值,代码如下:
public int ShowGoods()
{
    Console.WriteLine("商品信息");
    return 1;
}
在上面的代码中,如果将“return 1;”删除,就会出现如下图所示的错误提示:


图 1 方法无返回值的错误提示

C#方法的参数

调用方法时可以给该方法传递一个或多个值,传给方法的值叫作实参,在方法内部,接收实参的变量叫作形参,形参在紧跟着方法名称的括号中声明,形参的声明语法与变量的声明语法一样。形参只在方法内部有效。

C# 中方法的参数主要有 4 种,分别为值参数、ref 参数、out 参数和 params 参数,下面分别进行讲解。

1) 值参数

值参数就是在声明时不加修饰的参数,它表明实参与形参之间按值传递。

当使用值参数的方法被调用时,编译器为形参分配存储单元,然后将对应的实参的值复制到形参中,由于是值类型的传递方式。所以,在方法中对值类型的形参的修改并不会影响实参。

2) ref参数

ref 参数使形参按引用传递(即使形参是值类型),其效果是:在方法中对形参所做的任何更改都将反映在实参中。

如果要使用 ref 参数,则方法声明和方法调用都必须显式使用 ref 关键字。

3) out参数

out 关键字用来定义输出参数,它会导致参数通过引用来传递,这与 ref 关键字类似,不同之处在于:ref要求变量必须在传递之前进行赋值,而使用 out 关键字定义的参数,不用进行赋值即可使用。

如果要使用 out 参数,则方法声明和方法调用都必须显式使用 out 关键字。

4) params参数

在声明方法时,如果有多个相同类型的参数,可以定义为 params 参数。

params 参数是一个一维数组,主要用来指定在参数数目可变时所采用的方法参数。

【实例】不同类型参数方法的使用。创建一个控制台应用程序,定义 4 个 Add 方法,用来计算整型数据的和,这 4 个方法中分别使用值参数、ref 参数、out 参数和 params 参数,然后在 Main() 方法中调用这 4 个方法,比较它们的运算结果。代码如下:
class Program
{
    private int Add(int x, int y)        // 值参数
    {
        x = x + y;
        return x;
    }
    private int Add(ref int x, int y)    // ref参数
    {
        x = x + y;
        return x;
    }
    private int Add(int x, int y, out int z)  // out参数
    {
        z = x + y;
        return z;
    }
    private int Add(params int[] x)     // params参数
    {
        int result = 0;
        for (int i = 0; i < x.Length; i++)
        {
            result += x[i];
        }
        return result;
    }
    static void Main(string[] args)
    {
        Program pro = new Program();
        int x = 30;
        int y = 40;
        int z;
        int result;
        Console.WriteLine("值参数的使用: " + pro.Add(x, y));
        Console.WriteLine("值参数中实参x的值: " + x);
        Console.WriteLine("ref参数的使用: " + pro.Add(ref x, y));
        Console.WriteLine("ref参数中实参x的值: " + x);
        Console.WriteLine("out参数的使用: " + pro.Add(x, y, out z));
        Console.WriteLine("params参数的使用: " + pro.Add(20, 30, 40, 50, 60));
        Console.ReadLine();
    }
}
程序运行结果为:

值参数的使用: 70
值参数中实参x的值: 30
ref参数的使用: 70
ref参数中实参x的值: 70
out参数的使用: 110
params参数的使用: 200

仔细观察运行结果,发现第 2 行和第 4 行中实参 x 的值不一样,第 2 行中实参 x 的值并没有因为值参数方法的计算结果而改变,但是由于接下来调用了 ref 参数的方法,所以在输出第 4 行内容时,实参 x 的值随之发生了更改。

相关文章