VB.NET:VB.NET中的静态T(C#)是什么?

考虑:

public static T GetValueOrDefault(this IDataReader reader, string columnName) T returnValue = default(T); 

我想实现这样的东西来检查DBNull。 我可以很好地遵循代码,但我不太明白静态T在VB.NET中是什么。 有人可以解释一下吗?

Shared中VB中的static等价物。 共享方法通常放在Helper类中,因为它们不需要运行类的实例。

类型T表示这是一种通用方法(这是VB 9和C#3中的新function)。 generics方法有效地将类型作为参数或返回generics类型。

扩展方法在VB 9 / C#3中也是新的。这些允许您通过添加方法扩展现有类型。 您所需要的只是一个Shared方法,它在与您的代码相同的命名空间中可用,而在VB中,代码必须位于模块中,而不是普通的类。

模块是一个无法实例化的类,因此只有共享方法。 它使用Module关键字声明,而不是class关键字。 这是你在VB中的代码。

(对于那些知道“在幕后”发生了什么的人,奇怪地将值类型设置为Nothing在VB中编译并且是获得值类型的默认值的受支持方式)。

 Imports System.Runtime.CompilerServices  _ Public Shared Function GetValueOrDefault(Of T)(ByVal reader As IDataReader, ByVal columnName As String) As T Dim returnValue As T = Nothing End Function 

他正在创建一种扩展方法。 在C#中,这是通过创建静态方法(在Visual Basic中共享)来完成的。

在Visual Basic中创建扩展方法的机制似乎与在C#中执行它的方式有很大不同。 您可能希望阅读有关扩展方法的MSDN条目,请访问: http : //msdn.microsoft.com/en-us/library/bb384936.aspx

这是VB中的方法:

 Imports System.Runtime.CompilerServices  _ Public Shared Function GetValueOrDefault(Of T)(ByVal reader As IDataReader, ByVal columnName As String) as T Dim returnvalue As T = Nothing End Function 

我不知道如何在VB中执行默认(T),所以我把它留了出来。

C#的static关键字与VB的Shared关键字相同。

您的示例中的T是generics方法中的type-parameter。

在VB中:

 Public Function GetValueOrDefault(Of T)(ByVal reader as IDataReader, ByVal columnName as string) as T 

意味着当您调用该方法时,您提供了一个类型参数(告诉T将调用该方法的类型)

但是,不确定用于创建扩展方法的VB语法。 (这是你的第一个参数上的“this”关键字表示的。)

你所看到的不是“静态T”,而是两个独立的部分。

  • public表示该方法是公开可见的。
  • static表示方法为static。 这意味着它为类运行,而不是为实例运行。
  • T – 是返回类型。

有关静态function的更多信息。

VB.NET中的静态函数称为共享函数。

有关共享function的更多信息。