VB.NET.索引器和属性冲突



我需要一个具有相同名称的索引器和属性

Public Class WsItemGrpType
    Private _redefined As WsItemIcType
    Public Sub New(ByVal redefined As WsItemIcType)
        _redefined = redefined
        WsItemIcChar = New WsItemIcCharType(_redefined)
    End Sub
    Public WsItemIcChar As WsItemIcCharType
    Public Class WsItemIcCharType
        Private _redefined As WsItemIcType
        Private _current As Integer = 0
        Private _length As Integer = 9
        Public ReadOnly Property Length() As Integer
            Get
                Return _length
            End Get
        End Property
        Public Sub New(ByVal redefined As WsItemIcType)
            _redefined = redefined
        End Sub
        Default Public Property WsItemIcChar(i As Integer) As Char
            Get
                _current = i
                Return Char.Parse(_redefined.WsItemIc.Substring(_current * 1, 1))
            End Get
            Set(value As Char)
                _redefined.WsItemIc = _redefined.WsItemIc.Remove(_current * 1, 1).Insert(_current * 1, value.ToString())
            End Set
        End Property
        Public Property WsItemIcChar() As Char
            Get
                Return Char.Parse(_redefined.WsItemIc.Substring(_current * 1, 1))
            End Get
            Set(value As Char)
                _redefined.WsItemIc = _redefined.WsItemIc.Remove(_current * 1, 1).Insert(_current * 1, value.ToString())
            End Set
        End Property
    End Class
End Class

错误:错误8"公用默认属性WsItemIcChar(i As Integer)As Char"one_answers"公用属性WsIItemIcChar As Char"不能相互重载,因为只有一个声明为"Default"。

如何在不更改属性和索引器名称的情况下同时使用它们?

我不确定你所说的"indexator"是什么意思,但你可以通过两种方式重载你的属性:

  1. 宣布第二个为默认,

    Default Public Property WsItemIcChar(i As Integer) As Char
        Get
            _current = i
            Return Char.Parse(_redefined.WsItemIc.Substring(_current * 1, 1))
        End Get
        Set(value As Char)
            _redefined.WsItemIc = _redefined.WsItemIc.Remove(_current * 1, 1).Insert(_current * 1, value.ToString())
        End Set
    End Property
    Default Public Property WsItemIcChar() As Char
        Get
            Return Char.Parse(_redefined.WsItemIc.Substring(_current * 1, 1))
        End Get
        Set(value As Char)
            _redefined.WsItemIc = _redefined.WsItemIc.Remove(_current * 1, 1).Insert(_current * 1, value.ToString())
        End Set
    End Property
    
  2. 声明i为可选,

    Default Public Property WsItemIcChar(Optional i As Integer = 0) As Char
        Get
            If (i <> 0) Then _current = i
            Return Char.Parse(_redefined.WsItemIc.Substring(_current * 1, 1))
        End Get
        Set(value As Char)
            _redefined.WsItemIc = _redefined.WsItemIc.Remove(_current * 1, 1).Insert(_current * 1, value.ToString())
        End Set
    End Property
    

最新更新