C# 类和对象 方法 语言规范

作者:袖梨 2022-06-25

方法 (method) 是一种成员,用于实现可以由对象或类执行的计算或操作。

静态方法 (static method) 通过类来访问。

实例方法 (instance method) 通过类的实例来访问。

方法具有一个参数 (parameter) 列表(可以为空),表示传递给该方法的值或变量引用;

方法还具有一个返回类型 (return type),指定该方法计算和返回的值的类型。

如果方法不返回值,则其返回类型为 void。

与类型一样,方法也可以有一组类型参数,当调用方法时必须为类型参数指定类型实参。

与类型不同的是,类型实参经常可以从方法调用的实参推断出,而无需显式指定。

方法的签名 (signature) 在声明该方法的类中必须唯一。

方法的签名由方法的名称、类型参数的数目以及该方法的参数的数目、修饰符和类型组成。方法的签名不包含返回类型。

 


参数用于向方法传递值或变量引用。

方法的参数从调用该方法时指定的实参 (argument) 获取它们的实际值。

有四类参数:值参数、引用参数、输出参数和参数数组。

值参数 (value parameter) 用于传递输入参数。

一个值参数相当于一个局部变量,只是它的初始值来自为该形参传递的实参。

对值参数的修改不影响为该形参传递的实参。

值参数可以是可选的,通过指定默认值可以省略对应的实参。

引用参数 (reference parameter) 用于传递输入和输出参数。

为引用参数传递的实参必须是变量,并且在方法执行期间,引用参数与实参变量表示同一存储位置。

引用参数使用 ref 修饰符声明。

下面的示例演示 ref 参数的用法。

using system;

class test
{
    static void swap(ref int x, ref int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }

    static void main()
    {
        int i = 1, j = 2;
        swap(ref i, ref j);
        console.writeline("{0} {1}", i, j);     // outputs "2 1"
    }
}

输出参数 (output parameter) 用于传递输出参数。

对于输出参数来说,调用方提供的实参的初始值并不重要。

除此之外,输出参数与引用参数类似。

输出参数是用 out 修饰符声明的。

下面的示例演示 out 参数的用法。

using system;

class test
{
    static void divide(int x, int y, out int result, out int remainder)
    {
        result = x / y;
        remainder = x % y;
    }

    static void main()
    {
        int res, rem;
        divide(10, 3, out res, out rem);
        console.writeline("{0} {1}", res, rem); // outputs "3 1"
    }
}

参数数组 (parameter array) 允许向方法传递可变数量的实参。

参数数组使用 params 修饰符声明。

只有方法的最后一个参数才可以是参数数组,并且参数数组的类型必须是一维数组类型。

system.console 类的 write 和 writeline 方法就是参数数组用法的很好示例。它们的声明如下。

public class console
{
    public static void write(string fmt, params object[] args) {...}
    public static void writeline(string fmt, params object[] args) {...}

}在使用参数数组的方法中,参数数组的行为完全就像常规的数组类型参数。

但是,在具有参数数组的方法的调用中,既可以传递参数数组类型的单个实参,也可以传递参数数组的元素类型的任意数目的实参。

在后一种情况下,将自动创建一个数组实例,并使用给定的实参对它进行初始化。示例:

console.writeline("x={0} y={1} z={2}", x, y, z);等价于以下语句:

string s = "x={0} y={1} z={2}";
object[] args = new object[3];
args[0] = x;
args[1] = y;
args[2] = z;
console.writeline(s, args);

相关文章

精彩推荐