gpt4 book ai didi

c# - 'this'在C#语言中有什么用?

转载 作者:太空狗 更新时间:2023-10-29 22:03:36 27 4
gpt4 key购买 nike

我读过开源 C# 代码,其中有很多奇怪的语法(对我来说)。

它们使用 this 关键字声明方法参数,如下所示:

这个对象@object

这是什么意思?

如果我删除数据类型之前的“this”关键字,那么它的工作方式会有所不同吗?

最佳答案

听起来像 Extension Method .

@ symbol 允许变量名与 C# 关键字相同 - 我个人倾向于像避免瘟疫一样避免它们。

如果删除 this关键字,它将不再是一个扩展方法,只是一个静态方法。根据调用代码语法,它可能不再编译,例如:

public static class IntegerMethods
{
public static int Add(this int i, int value)
{
return i + value;
}
}

int i = 0;

// This is an "extension method" call, and will only compile against extension methods.
i = i.Add(2);
// This is a standard static method call.
i = IntegerMethods.Add(i, 2);

编译器无论如何都会简单地将所有“扩展方法调用”转换为标准的静态方法调用,但扩展方法调用仍将只针对有效的扩展方法,根据 this type name语法。

一些准则

这些是我自己的,但我发现它们很有用。

  • 扩展方法的可发现性可能是个问题,因此请注意您选择包含它们的命名空间。我们在 .NET 命名空间下有非常有用的东西,例如 System.Collections管他呢。不太有用但“常见”的东西往往在 Extensions.<namespace of extended type> 下这样可发现性至少通过约定保持一致。
  • 尽量不要在广泛的范围内扩展常用的类型,你不想MyFabulousExtensionMethod出现在 object在您的整个应用程序中。如果您需要,要么将范围( namespace )限制为非常具体,要么绕过扩展方法并直接使用静态类 - 这些都不会污染类型元数据在 IntelliSense 中。
  • 在扩展方法中,“this”可以是null (由于它们如何编译成静态方法调用)所以要小心,不要假设“this”不为 null(从调用方来看,这看起来像是对 null 目标的成功方法调用)。

这些是可选的,并不详尽,但我发现它们通常属于“好”建议的范畴。 YMMV.

关于c# - 'this'在C#语言中有什么用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16482343/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com