扩展方法可以访问“this”吗?目的?

发布于 2024-10-30 01:54:58 字数 69 浏览 3 评论 0原文

假设我想向 B 类添加一个扩展方法。 我可以通过在扩展方法中使用“this”引用来获取对调用扩展方法的类 B 实例的引用吗?

Lets say I want to add an extension method to class B.
Can I get a reference to the instance of class B the extension method is invoked on by using the "this" reference inside my extension method?

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

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

发布评论

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

评论(2

作业与我同在 2024-11-06 01:54:58

是和不是。简单浏览一下文档就会非常清楚。

根据定义,扩展方法的第一个参数是指向调用该方法/附加到该方法的对象的指针,它实际上是由 this 关键字引用的变量,但具有自己的名称:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

这使得很容易有一个“这个”那里,名为“str”。因此,您不能使用“this”(因为这将指向定义扩展方法的类的不存在实例),但您可以声明自己的替换变量,指向扩展方法所附加的对象。

Yes and no. A short look at the documentation makes it VERY clear.

Per definition the first parameter of an extension method is the pointer to the object the method was called from / attached to, and it actually is a variable referenced by the this keyword but with it's own name:

http://msdn.microsoft.com/en-us/library/bb383977.aspx

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static int WordCount(this String str)
        {
            return str.Split(new char[] { ' ', '.', '?' }, 
                             StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }   
}

That makes it quite easy that there is a "this" there, named "str". So, you can not use "this" (because that would point to the non-existing instance of the class the extension method is defined on), but you can declare your own replacement variable pointing to the object an extension method is attached to.

岁月静好 2024-11-06 01:54:58

不;您必须使用参数的实际名称。

No; you have to use the actual name of the argument.

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