На что ссылается «this» в сигнатуре метода C #и есть ли эквивалент VB.NET?

Я смотрел серию видео ASP.NET MVC Storefront снова и увидел кое-что, что я никогда раньше не замечал и не обращал на это внимания. Я заметил, что в списках сигнатур различных методов было много ссылок на this. Вот пример одного:

public static Category WithCategoryName(this IList list, string categoryName)   
{
    return 
    (
        from s in list
        where s.Name.Equals(categoryName, StringComparison.InvariantCultureIgnoreCase)
        select s
    )
   .SingleOrDefault();
}

Я сразу понял IList listи string categoryNameв подписи, но не понял, что делает this.

Итак, будучи на 95% специалистом по VB, я вставил код в свой любимый конвертер и получил:


Public Shared Function WithCategoryName(list As IList(Of Category), categoryName As String) As Category

    Return 
    (
        From s In list 
        Where s.Name.Equals(categoryName, StringComparison.InvariantCultureIgnoreCase)
        Select s
    )
   .SingleOrDefault()

End Function

Во-первых, я не совсем уверен, почему был включен, возможно, это просто конвертер, тем не менее, как видите, thisне было преобразовано ни во что, что я могу сказать, если только это не имеет отношения к вышеупомянутому .

Итак, вопросы::

  1. На что на самом деле ссылается thisи/или что он делает в сигнатуре метода C #?
  2. Существует ли эквивалент VB.NET?



Ответ на вопрос 1:

Таким образом, мы определенно уточнили, чтоthisна самом делеобозначает метод расширения и что, судя по полученным ответам, не существует встроенного эквивалента VB.

Я хотел бы добавить, что поскольку я упомянул видео ASP.NET MVC Storefront , приведенный выше пример C #был взят из его класса CategoryFilters. Я предполагаю, что именно так вы реализуете методологию каналов и фильтров или конвейера .



Ответ на вопрос 2:

Я предполагаю, что способ обработки методов расширения в VB.NET примерно такой, например:

Imports System.Runtime.CompilerServices 

Public Module StringExtensions 

     _ 
    Public Function IsNullOrBlank(ByVal s As String) As Boolean 
       Return s Is Nothing OrElse s.Trim.Length.Equals(0) 
    End Function 

End Module

8
задан Code Maverick 25 November 2013 в 15:50
поделиться