首页 > 解决方案 > VB.NET 共享索引器 - 我做错了什么?

问题描述

我有这堂课:

''' <summary>
''' Utility class for managing ASP.NET session state.
''' </summary>
Public Class SessionHelper
    ''' <summary>
    ''' Private constructor to prevent instantiation since classes cannot be declared Shared in VB.
    ''' </summary>
    Private Sub New()
    End Sub

    ''' <summary>
    ''' Retrieves the current session state.
    ''' </summary>
    ''' <returns></returns>
    Public Shared ReadOnly Property Session As HttpSessionState
        Get
            Return HttpContext.Current.Session
        End Get
    End Property

    ''' <summary>
    ''' Retrieves the current system connection string.
    ''' </summary>
    ''' <returns></returns>
    Public Shared ReadOnly Property ConnectionString As String
        Get
            Dim raw As String = Session(SessionConstants.DotNetConnectionString)
            If raw Is Nothing Then Return Nothing
            Return raw.Replace(",", ";")
        End Get
    End Property

    ''' <summary>
    ''' Gets or sets a session variable.
    ''' </summary>
    ''' <param name="key">The key of the session variable.</param>
    ''' <returns>The value of the session variable.</returns>
    Public Shared Property Item(ByVal key As String) As Object
        Get
            Return Session(key)
        End Get
        Set(value As Object)
            Session(key) = value
        End Set
    End Property
End Class

当我尝试调用共享索引器时出现编译错误:

SessionHelper("DotNetConnectionString")

错误 BC30109 'SessionHelper' 是类类型,不能用作表达式。

我究竟做错了什么?还是 VB 不支持共享索引器?我可以显式调用它,SessionHelper.Item("DotNetConnectionString")但索引器语法不起作用。

标签: vb.net

解决方案


通过省略“Item”方法名称,您可以像访问默认索引器一样访问该方法,但该方法未声明为“Default”。事实上,您不能在 VB 中声明共享索引器。

例如,您必须更改对共享方法的调用:

SessionHelper.Item("DotNetConnectionString")

注意:我在发帖后注意到艾哈迈德在评论中包含了相同的信息,所以他应该得到充分的信任。


推荐阅读