Могут ли методы расширения получить доступ к объекту "this"? - PullRequest
2 голосов
/ 06 апреля 2011

Допустим, я хочу добавить метод расширения в класс B. Могу ли я получить ссылку на экземпляр класса B, для которого вызывается метод расширения, используя ссылку "this" внутри моего метода расширения?

Ответы [ 2 ]

6 голосов
/ 06 апреля 2011

Да и нет. Короткий взгляд на документацию делает это ОЧЕНЬ ясным.

По определению, первым параметром метода расширения является указатель на объект, из которого был вызван / присоединен метод, и на самом деле это переменная, на которую ссылается ключевое слово 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» (поскольку это будет указывать на несуществующий экземпляр класса, для которого определен метод расширения), но вы можете объявить свою собственную переменную замены, указывающую на объект, к которому присоединен метод расширения.

1 голос
/ 06 апреля 2011

Нет;Вы должны использовать фактическое имя аргумента.

...