“方法”是包含一系列语句的代码块。 程序通过“调用”方法并指定所需的任何方法参数来执行语句。 在 C# 中,每个执行指令都是在方法的上下文中执行的。 Main 方法是每个 C# 应用程序的入口点,在启动程序时由公共语言运行时 (CLR) 调用。
方法签名
通过指定方法的访问级别(例如 public 或 private)、可选修饰符(例如 abstract 或 sealed)、返回值、名称和任何方法参数,可以在类或结构中声明方法。 这些部分统称为方法的“签名”。
为进行方法重载,方法的返回类型不是方法签名的一部分。 但是,在确定委托和委托所指向方法之间的兼容性时,返回类型是方法签名的一部分。
方法参数括在括号中,并用逗号隔开。 空括号表示方法不需要参数。 下面的类包含三个方法:
abstract class Motorcycle
{
// Anyone can call this.
public void StartEngine() {/* Method statements here */ }
// Only derived classes can call this.
protected void AddGas(int gallons) { /* Method statements here */ }
// Derived classes can override the base class implementation.
public virtual int Drive(int miles, int speed) { /* Method statements here */ return 1; }
// Derived classes must implement this.
public abstract double GetTopSpeed();
}
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);
}
}
方法定义指定所需任何“形参”的名称和类型。 调用代码在调用方法时,将为每个形参提供称为“实参”的具体值。 实参必须与形参类型兼容,但调用代码中使用的实参名称(如果有)不必与方法中定义的形参名称相同。 例如:
public void Caller()
{
int numA = 4;
// Call with an int variable.
int productA = Square(numA);
int numB = 32;
// Call with another int variable.
int productB = Square(numB);
// Call with an integer literal.
int productC = Square(12);
// Call with an expression that evaulates to int.
productC = Square(productA * 3);
}
int Square(int i)
{
// Store input argument in a local variable.
int input = i;
return input * input;
}
通过使用. 引用传递的值。
默认情况下,将值类型传递给方法时,传递的是副本而不是对象本身。 因此,对参数所做的更改对于调用方法中的原始副本没有影响。 可以使用 ref 关键字通过引用传递值类型。 有关更多信息,请参见传递值类型参数(C# 编程指南)。 有关内置值类型的列表,请参见值类型表(C# 参考)。
class SimpleMath
{
public int AddTwoNumbers(int number1, int number2)
{
return number1 + number2;
}
public int SquareANumber(int number)
{
return number * number;
}
}
若要使用从方法返回的值,调用方法可以在本来使用同一类型的值就已足够的任何位置使用方法调用本身。 还可以将返回值赋给变量: 例如,下面的两个代码示例可实现相同的目的:
int result = obj.AddTwoNumbers(1, 2);
result = obj.SquareANumber(result);
// The result is 9.
Console.WriteLine(result);
result = obj.SquareANumber(obj.AddTwoNumbers(1, 2));
// The result is 9.
Console.WriteLine(result);
使用局部变量,在这种情况下,result,存储值是可选的。 这有助于提高代码的可读性,并且如果要为方法的整个范围存储参数的原始值,可能必须这样做。
方法中,返回值类型大体有三种,第一种是void:没有返回值、第二种是有返回值,比如反回一个基本数据类型,或者可以返回一个对象、一个集合等等、第三种是没有任何的返回值类型,就连void都没有,种情况突出实例就是构造函数;
如果有返回值的话,那么方法体中必然有一条return语句,如果我们想得到return返回的结果的话,那么就得调用这个函数,谁调用了这个值就是谁的,简单举个例子:
public class Me {
public static void main(String[] args) {
System.out.println("我的名字是:"+show("tom"));//此处传入的值是tom
}
public static String show(String name){
return name;
}