迹忆客 专注技术分享

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

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 是具有遵循基本返回和参数类型的重载函数的常见集群。

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

本文地址:

相关文章

在 C# 中发出 HTTP POST Web 请求

发布时间:2024/02/04 浏览次数:131 分类:编程语言

在 C# 中,可以使用 3 种主要方法来发出 HTTP POST Web 请求:WebClient 类,HttpWebRequest 类和 HttpClient 类。本教程将讨论在 C# 中发出 HTTP POST Web 请求的方法。使用 C# 中的 WebClient 类发出 HTTP POST Web 请求

在 C# 中调整图像大小

发布时间:2024/02/04 浏览次数:203 分类:编程语言

有两种主要方法可用于在 C# 中调整图像的大小,Bitmap 类构造函数和 graphics.DrawImage()函数。在本教程中,我们将讨论在C#中调整图像大小的方法。我们将带您完成整个过程,从加载原始图像到保

在 C# 中下载图片

发布时间:2024/02/04 浏览次数:138 分类:编程语言

有 3 种主要方法可用于下载 C# 中的图片,WebClient.DownloadFile()函数,Bitmap 类和 Image.FromStream()函数。在 C# 中使用 WebClient 类下载图片 WebClient 类提供了用于向 C# 中的 URL 发送数据和从 URL 接收数据

在 C# 中使用秒表

发布时间:2024/02/04 浏览次数:139 分类:编程语言

我们可以使用 Stopwatch 类来计算 C# 中的经过时间。使用 C# 中的秒表类计算经过时间 Stopwatch 类在 C# 中准确测量经过的时间。

在 C# 中获取可执行路径

发布时间:2024/02/04 浏览次数:200 分类:编程语言

有 3 种主要方法可用于获取 C# 中程序的可执行路径,即 Assembly 类,AppDomain 类和 Path 类。本教程将介绍获取 C# 代码的可执行路径的方法。使用 C# 中的 Assembly 类获取可执行路径

扫一扫阅读全部技术教程

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

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便