C# 方法签名中的“这”指的是什么,是否有 VB.NET 等效项
本文关键字:VB 是否 NET 是什么 方法 | 更新日期: 2023-09-27 18:31:35
我一直在再次观看 ASP.NET MVC Storefront视频系列,看到了以前从未注意到或关注过的东西。我注意到在各种方法的签名列表中有很多对this
的引用。 下面是一个示例:
public static Category WithCategoryName(this IList<Category> list, string categoryName)
{
return
(
from s in list
where s.Name.Equals(categoryName, StringComparison.InvariantCultureIgnoreCase)
select s
)
.SingleOrDefault();
}
我立即理解了签名中的IList<Category> list
和string categoryName
,但对this
的作用感到困惑。
所以,作为一个 95% 的 VB 人,我将代码弹出到我最喜欢的转换器中并得到:
<System.Runtime.CompilerServices.Extension>
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
首先,我不完全确定为什么包含<System.Runtime.CompilerServices.Extension>
,也许它只是转换器,但是,如您所见,this
没有转换为我能说的任何内容,除非它与上述<System.Runtime.CompilerServices.Extension>
有关。
所以问题是:
this
实际上在 C# 方法签名中引用和/或执行什么操作?- 有 VB.NET 等价物吗?
对问题1的答复:
因此,我们已经明确澄清了this
实际上表示扩展方法,并且从给出的答案来看,似乎没有内联VB等效项。
我想补充一点,由于我提到了 ASP.NET MVC 店面视频,上面的 C# 示例是从他的CategoryFilters
类中提取的。 我假设这就是您实现引用的管道和过滤器或管道方法的方式。
对问题2的答复:
我假设 VB。NET 处理扩展方法的方式是这样的,例如:
Imports System.Runtime.CompilerServices
Public Module StringExtensions
<Extension()> _
Public Function IsNullOrBlank(ByVal s As String) As Boolean
Return s Is Nothing OrElse s.Trim.Length.Equals(0)
End Function
End Module
这是一个扩展方法。this
指定它是this <parameter>
类型的扩展方法,在您的情况下为 IList<Category>
.
这里有一个 VB.NET 等价物,尽管它是一个属性,而不是一个关键字。
扩展方法需要知道要应用到的类型,请注意,这在泛型中很明显。扩展方法:
public static string GetNameOf(this List<Category> category) { return ""; }
除了List<Category>
之外,任何其他内容都不可用。
那个地方表示扩展方法。
namespace ExtensionMethods
{
public static class MyExtensions
{
public static int WordCount(this String str)
{
return str.Split(new char[] { ' ', '.', '?' },
StringSplitOptions.RemoveEmptyEntries).Length;
}
}
}
在此代码之后,程序中的任何字符串对象都可以使用此函数,例如
int count = "Hello world".WordCount(); //count would be equal 2
换句话说,这是一种扩展您无权访问或不允许更改或派生的类型的功能的方法。
这将创建一个扩展方法。
VB.Net 没有相应的语法,因此您需要自己应用该属性。