“这个”是什么意思?在静态方法声明中意味着什么?

发布于 2024-10-18 12:56:55 字数 185 浏览 4 评论 0原文

我见过一些在函数参数声明中使用关键字 this 的代码。例如:

public static Object SomeMethod( this Object blah, bool blahblah)

this 一词在该上下文中意味着什么?

I've seen some code that uses the keyword this in the function parameter declaration. For example:

public static Object SomeMethod( this Object blah, bool blahblah)

What does the word this mean in that context?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

浅语花开 2024-10-25 12:56:55

这意味着 SomeMethod() 是一个扩展方法Object 类。

定义后,您可以在任何 Object 实例上调用此方法(尽管它被声明为 static),如下所示:

object o = new Object();
bool someBool = true;

// Some other code...

object p = o.SomeMethod(someBool);

this Object 参数引用您调用它的对象,并且实际上在参数列表中找不到。

当您像实例方法一样调用它时,它被声明为静态的原因是因为编译器将其转换为 IL 中真正的静态调用。这虽然很深入,所以我不会详细说明,但这也意味着您可以像调用任何静态方法一样调用它:

object o = new Object();
bool someBool = true;

// ...

object p = ObjectExtensions.SomeMethod(o, someBool);

It means SomeMethod() is an extension method to the Object class.

After defining it you can call this method on any Object instances (despite it being declared static), like so:

object o = new Object();
bool someBool = true;

// Some other code...

object p = o.SomeMethod(someBool);

The this Object parameter refers to the object you call it on, and is not actually found in the parameter list.

The reason why it's declared static while you call it like an instance method is because the compiler translates that to a real static call in the IL. That goes deep down though, so I shan't elaborate, but it also means you can call it as if it were any static method:

object o = new Object();
bool someBool = true;

// ...

object p = ObjectExtensions.SomeMethod(o, someBool);
云雾 2024-10-25 12:56:55

这是声明扩展方法的方式。

这意味着您可以使用 .SomeMethod 为任何对象调用 SomeMethod。 . 之前的对象将是 blah 参数。

string s = "sdfsd";
Object result = s.SomeMethod(false);

扩展方法可用于从 this 参数类型继承的所有类型(在本例中为对象)。如果您有 SomeMethod(this IEnumerableenumerable) ,它将在所有 IEnumerable:s 上可用,例如 List

It is how you declare an extension method.

This means that you can invoke SomeMethod with .SomeMethod for any object. The object before the . will be the blah parameter.

string s = "sdfsd";
Object result = s.SomeMethod(false);

The extension method will be available on all types inheriting from the type of the this parameter, in this case object. If you have SomeMethod(this IEnumerable<T> enumerable) it will be available on all IEnumerable<T>:s like List<T>.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文