当前位置:网站首页>C#入门系列(九) -- 方法使用

C#入门系列(九) -- 方法使用

2022-06-09 09:18:00 InfoQ



一个方法是把一些相关的语句组织在一起,用来执行一个任务的语句块。每一个 C# 程序至少有一个带有 Main 方法的类。

方法调用

1.1 定义方法的调用

针对方法与调用者是否属于同一C#类、方法是否有形参,可将方法的调用分为下面几种形式:

//调用属于同一个类的有形参方法
方法名(实参列表)

//调用属于同一个类的无形参方法方法所属的类名
方法名()

//调用属于不同类的有形参方法方法所属的类名
方法名(实参列表)

//调用属于不同类的无形参方法
方法名()

1.2 命名参数

在C#中,进行方法调用时,每个实参的位置都必须一一对应相应形参的位置,这种参数叫做位置参数。

从C#4.0开始,方法调用时支持命名参数机制,只要显式指定参数的名称,就可以以任意顺序在方法调用中列出实参。

使用命名参数时需注意:

  • 方法的声明与使用位置参数的方法声明完全一样;
  • 进行方法调用时,形参的名字后必须跟着冒号和实际的参数值或表达式,

格式如下:

方法名(形参名:参数值,...,形参名:参数值)

另外,进行方法调用时,可以混合使用位置参数和命名参数两种机制,但是必须先列出所有的位置参数。

示例:

class Program
{
 static void Main(string[] args)
 {
 // 位置参数
 Sum(1, 2, 3);
 // 命名参数
 Sum(b: 1, c: 2, a: 3);
 // 混合使用
 Sum(1, b: 3, c: 2);

 Console.ReadLine();
 }

 static void Sum(int a,int b,int c)
 {

 Console.WriteLine("a={0},b={1},c={2}", a, b, c);
 }
}

命名参数对于自描述的程序很有用,它可以帮助程序员在进行方法调用时显示哪个值赋给了哪个形参,使得方法调用时具有更多的信息不容易出错,增加程序代码的可读性。


方法递归

  • 递归调用:方法直接或间接的调用自己,称为递归调用。
  • 递归会产生很优雅的代码。
  • C#允许方法实现直接递归调用和间接递归调用。

方法递归调用的经典示例:

兔子繁殖问题:

有一对兔子,从出生后第3个月起每月生一对兔子,小兔子长到第三个月后每月又生一对兔子,假如兔子都不死,问第几个月才能有100对兔子?

class Program
{
 static void Main(string[] args)
 {
 int i = 10;
 // 结束条件,找一个比较大的数。 后续算法测试通过,可变为true
 while (i < 100)
 {
 if (Recursion(i) > 100)
 {
 Console.WriteLine(&quot;第{0}个月兔子达成100对&quot;, i);
 break;
 }
 i++;
 }

 Console.ReadLine();
 }

 static int Recursion(int n)
 {
 // 递归出口:兔子第一个月第二个月都为1对
 if (n == 1 || n == 2)
 {
 return 1;
 }
 else
 {
 // 递归条件:兔子第三月起是前两个月的兔子之和
 return Recursion(n - 1) + Recursion(n - 2);
 }
 }
}

用递归求解问题:

  • 通常可以将一个比较大的问题层层转化为一个与原问题相类似的、规模较小的问题进行求解,最终实现对原问题的求解。
  • 使用递归时一定要注意必须具备让递归结束的条件。


方法重载

  • 定义:C#的一个类中超过一个方法具有相同名称的现象叫做方法重载。
  • 在C#中,实现方法重载时必须保证使用相同名称的每个方法有一个和其他方法不同的签名,并且判断方法重载是否合法时编译器只考查这个方面。
  • C#重载方法的条件:方法名相同,方法的参数类型或参数个数不同。

错误的重载方法示例:

static void Sum(int a, int b) { }
static void Sum(int x, int y) { }

正确的重载方法示例:

static void Sum(int a, int b) { }
static void Sum(string a, int b) { }
static void Sum(int a, int b, int c) { }

原网站

版权声明
本文为[InfoQ]所创,转载请带上原文链接,感谢
https://xie.infoq.cn/article/9cc5b09b9c62a481b6adf5472