迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 >

C# 中的方法组

作者:迹忆客 最近更新:2024/01/16 浏览次数:

本文将讨论 C# 中的方法组。


C# 中的方法组

我们有时会遇到一个函数可能有多个实现的情况。它可能有另一个具有完全不同的参数集或类型的定义,或者通常称为过载函数。

语法:

void print(int x) {
  ///...code
}

void print(int x, int y) {
  ///...code for x and y
}

这样的函数或方法称为方法组。


C# 中的 Delegates

DELEGATES 是指向创建的函数的指针。除了指向函数之外,它还定义了函数的返回类型及其参数。

比方说,一个名为 LAPTOP 的委托可以有一个返回类型为 void 和一个参数为 USERNAME(字符串)。我们还有另一个名为 PC 的函数,它也具有与 LAPTOP 相同的返回类型和参数类型。

在这种情况下,我们可以从委托 LAPTOP 调用 PC

代码示例:

delegate void LAPTOP(string username);

static void PC(string username) {
  Console.WriteLine("USER: " + username + " has logged in!");
}

static void Main() {
  LAPTOP lap1 = PC;
  lap1("Hydrogen");
}

你可以注意到我们已经用 PC 实例化了 LAPTOP 实例,稍后调用它会导致我们打印从 PC 方法传递的用户名。这就是 DELEGATES 的工作方式。


在 C# 中使用 DELEGATE 进行方法组转换

我们将研究方法组最常见的用途之一,以及在调用时如何处理它们。我们讨论了方法组如何成为基本方法的重载函数,并且我们可以通过使用 DELEGATES 根据需要使用方法组。

在我们的示例中,假设我们有一个名为 CAR 的方法,我们希望从中处理几个其他方法,例如 DASHBOARDWHEELLIGHTS 等。为方便起见,我们将只使用两种方法:LIGHTSMIRRORS

代码示例:

delegate void CAR(bool start);

static void MIRROR(bool start) {
  if (start)
    Console.WriteLine("Mirror is now working!");
  else
    Console.WriteLine("Mirror is not stopped/closed");
}

static void LIGHTS(bool start) {
  if (start)
    Console.WriteLine("Lights are now working!");
  else
    Console.WriteLine("Lights have stopped/closed");
}

现在我们已经定义了方法,让我们实现 MAIN 方法,我们使用委托来处理这些方法组。

CAR car = MIRROR;
car(true);

car = LIGHTS;
car(false);

你可以注意到 CAR 对象指向 MIRROR,但后来它指向 LIGHTS。然后调用该方法调用它指向的函数。

函数的名称被分配给 car 对象。将 DELEGATE 指针更改为指向其组中的不同方法称为 METHOD GROUP CONVERSION,在这种情况下,LIGHTSMIRRORSCAR 都是同一个方法组的一部分。


C# 中方法组的简单自定义 Delegate

创建可以指向 METHOD GROUPSDELEGATE 的简单方法如下所示。

Func<string> f_test = "AA".ToString;
Console.WriteLine(f_test());

调用上述将输出字符串 AA 作为结果。F_TEST 指向 ToString 方法并调用它。

你还可以注意到,此函数指向 ToString 方法的地址,而不是函数本身。这就是指针的工作原理。

下面提供了另一个示例以正确理解方法组。

Func<string, int> f_test = Convert.ToInt32;
Console.WriteLine(f_test("435"));

语法:

Func<param1, param2> name;
//param1 is the parameter passed in the function/method pointed to
//param 2 is the return type of that function/method that the delegate points to

由于 Convert.ToInt32 的返回类型为 INT18 不同的重载。必须定义参数类型,因为我们想用字符串"435"调用 F_TEST,我们将 PARAM2 定义为 STRING

即使只存在一个函数的重载,定义 PARAM2 也很重要;因为 METHOD GROUPS 是编译时结构,所以必须为单个重载选择它们。确保 PARAM2 至少包含一个过载是很重要的。

你还可以在函数中调用 List.Select(MethodGroup) 时删除 LINQ 中的强制转换。我们不会详细讨论 LINQ 上下文,因为本文关注 METHOD GROUPS


在 C# 中为方法组使用函数指针

仅当你在 METHOD GROUPS 中工作时,才需要从委托中指向不同的函数。在这种情况下,你必须确保返回类型和参数匹配。

C# 已经提供了一个 FUNC 关键字来允许指向不同的函数。就像指针通过指向对象和变量的地址然后调用它们来工作一样,你可以以相同的方式想象委托。

指针也往往具有与其寻址的对象相同的返回类型。由于函数的要求,代表还必须处理参数。

假设你想要将函数存储在数组中并为你的代码动态调用它们或将函数传递给要调用的其他函数时,需要指向函数。LAMBDA 函数也满足相同的要求。

然而,METHOD GROUPS 是具有遵循基本返回和参数类型的重载函数的常见集群。

上一篇:解压缩 C# 中的 Zip 文件

下一篇:没有了

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

解压缩 C# 中的 Zip 文件

发布时间:2024/01/16 浏览次数:71 分类:编程语言

ZipFile.ExtractToDirectory()函数可用于解压缩 C# 中的压缩文件。使用 C# 中的 ZipFile.ExtractToDirectory() 函数解压缩文件

从 C# 中的字符串中删除字符

发布时间:2024/01/16 浏览次数:74 分类:编程语言

有 4 种主要方法可用于从 C# 中的字符串,string.Replace()函数,string.Join()和 string.Split()函数,Regex.Replace()函数以及 Linq 方法。

在 C# 中转义双引号

发布时间:2024/01/16 浏览次数:144 分类:编程语言

有两种主要方法可用于在 C# 中转义双引号。在 C# 中使用""转义符转义双引号

在 C# 中重复字符串 X 次

发布时间:2024/01/16 浏览次数:173 分类:编程语言

在 C# 中,可以使用三种主要方法将字符串重复 x 次:字符串类构造函数,StringBuilder 类和 LINQ 方法。用 C# 中的 string 类构造函数重复执行 X 次字符串

在 C# 中重复字符串

发布时间:2024/01/16 浏览次数:140 分类:编程语言

可使用三种主要方法在 C# 中重复字符串,String 构造函数,LINQ 中的 Enumerable.Repeat()函数以及 StringBuilder 类。

在 C# 中向数组中添加字符串

发布时间:2024/01/16 浏览次数:168 分类:编程语言

没有内置方法可以将新元素动态添加到 C# 中完全填充的数组中。使用 C# 中的 List.Add() 方法将字符串添加到数组

在 C# 中截断字符串

发布时间:2024/01/16 浏览次数:66 分类:编程语言

我们可以使用 C# 中的 String.Substring()方法创建一个字符串的截断副本。在 C# 中使用 String.Substring() 方法截断字符串

在 C# 中将字符串格式设置为货币格式

发布时间:2024/01/16 浏览次数:156 分类:编程语言

在 C# 中,可以使用两种主要方法将字符串格式化为货币格式,即 String.Format()和 ToString()函数。在 C# 中使用 String.Format() 方法将字符串格式化为货币

在 C# 中将字符串拆分为列表

发布时间:2024/01/16 浏览次数:123 分类:编程语言

我们可以使用 string.Split()函数和 C# 中的 Linq 的 ToList()函数,将可变的字符串转换为字符串列表。在 C# 中使用 String.Split() 方法将字符串变量拆分为字符串列表

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便