方法可以是实例的或静态的。 调用实例方法需要将对象实例化,并对该对象调用方法;实例方法可对该实例及其数据进行操作。 通过引用该方法所属类型的名称来调用静态方法;静态方法不对实例数据进行操作。 尝试通过对象实例调用静态方法会引发编译器错误。
调用方法就像访问字段。 在对象名称(如果调用实例方法)或类型名称(如果调用 static 方法)后添加一个句点、方法名称和括号。 自变量列在括号里,并且用逗号分隔。
该方法定义指定任何所需参数的名称和类型。 调用方调用该方法时,它为每个参数提供了称为自变量的具体值。自变量必须与参数类型兼容,但调用代码中使用的自变量名(如果有)不需要与方法中定义的自变量名相同。在下面示例中, Square 方法包含名为 i 的类型为 int 的单个参数。 第一种方法调用将向 Square 方法传递名为num 的 int 类型的变量;第二个方法调用将传递数值常量;第三个方法调用将传递表达式。
public class Example { public static void Main() { // Call with an int variable. int num = 4; int productA = Square(num); // Call with an integer literal. int productB = Square(12); // Call with an expression that evaluates to int. int productC = Square(productA * 3); } static int Square(int i) { // Store input argument in a local variable. int input = i; return input * input; } } |
方法调用最常见的形式是使用位置自变量;它会以与方法参数相同的顺序提供自变量。 因此,可在以下示例中调 用 Motorcycle 类的方法。 例如, Drive 方法的调用包含两个与方法语法中的两个参数对应的自变量。 第一个成为 miles 参数的值,第二个成为 speed 参数的值。
class TestMotorcycle : Motorcycle { public override double GetTopSpeed() { return 108.4; } static void Main() { TestMotorcycle moto = new TestMotorcycle(); moto.StartEngine(); moto.AddGas(15); moto.Drive(5, 20); double speed = moto.GetTopSpeed(); Console.WriteLine("My top speed is {0}", speed); } } |
调用方法时,也可以使用命名的自变量,而不是位置自变量。 使用命名的自变量时,指定参数名,然后后跟冒号(":")和自变量。 只要包含了所有必需的自变量,方法的自变量可以任何顺序出现。 下面的示例使用命名的自变量来调用 TestMotorcycle.Drive 方法。 在此示例中,命名的自变量以相反于方法参数列表中的顺序进行传递。
using System; class TestMotorcycle : Motorcycle { public override int Drive(int miles, int speed) { return (int)Math.Round(((double)miles) / speed, 0); } public override double GetTopSpeed() { return 108.4; } static void Main() { TestMotorcycle moto = new TestMotorcycle(); moto.StartEngine(); moto.AddGas(15); var travelTime = moto.Drive(speed: 60, miles: 170); Console.WriteLine("Travel time: approx. {0} hours", travelTime); } } // The example displays the following output: // Travel time: approx. 3 hours |
可以同时使用位置自变量和命名的自变量调用方法。 但是,只有当命名参数位于正确位置时,才能在命名自变量后面放置位置参数。下面的示例使用一个位置自变量和一个命名的自变量从上一个示例中调用TestMotorcycle.Drive 方法。