Я смотрел серию видео 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
и 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
не было преобразовано ни во что, что я могу сказать, если только это не имеет отношения к вышеупомянутому
.
Итак, вопросы::
this
и/или что он делает в сигнатуре метода C #?Таким образом, мы определенно уточнили, чтоthis
на самом делеобозначает метод расширения и что, судя по полученным ответам, не существует встроенного эквивалента VB.
Я хотел бы добавить, что поскольку я упомянул видео ASP.NET MVC Storefront , приведенный выше пример C #был взят из его класса CategoryFilters
. Я предполагаю, что именно так вы реализуете методологию каналов и фильтров или конвейера .
Я предполагаю, что способ обработки методов расширения в 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