Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 |

 

  Вопрос: Обратиться к элементу HashTable по его ключу (ключ Добавлено: 15.02.05 18:44  

Автор вопроса:  Anatoliy
Добрый день
Возможно ли обратиться к элементу HashTable по его ключу, если ключ - это экземпляр собственного класса.
Чтобы прояснить, что же я сам спросил, приведу код:
Есть модуль с тремя классами:
cPoint - координаты ячейки (индекс строки и столбца)
cCell - основные характеристики ячейки - координаты, текст
cSheet - рабочий лист (семейство заполненных текстом ячеек)

Module TestModule

    Public Class cPoint
        'координаты ячейки
        Dim _Row As Integer
        Dim _Col As Integer
        Public Property Row() As Integer
            Get
                Row = _Row
            End Get
            Set(ByVal Value As Integer)
                _Row = Value
            End Set
        End Property
        Public Property Col() As Integer
            Get
                Col = _Col
            End Get
            Set(ByVal Value As Integer)
                _Col = Value
            End Set
        End Property
    End Class

    Public Class cCell
        'основные характеристики ячейки - координаты, текст
        Dim _Point As cPoint
        Dim _Text As String
        Public Sub New(ByVal Pt As cPoint, ByVal str As String)
            Me.Point = Pt
            Me.Text = str
        End Sub
        Public Sub New()

        End Sub
        Public Property Point() As cPoint
            Get
                Point = _Point
            End Get
            Set(ByVal Value As cPoint)
                _Point = Value
            End Set
        End Property
        Public Property Text() As String
            Get
                Text = _Text
            End Get
            Set(ByVal Value As String)
                _Text = Value
            End Set
        End Property
    End Class

    Public Class cSheet
        'рабочий лист (семейство заполненных текстом ячеек)
        Dim _htCell As New Hashtable
        Public Sub Add(ByVal Cl As cCell)
            _htCell.Add(Cl.Point, Cl)
        End Sub
        Public Function Item(ByVal iRow As Integer, ByVal iCol As Integer)
            Dim Pt As New cPoint
            Dim Cl As New cCell
            Pt.Col = iCol
            Pt.Row = iRow
            'Имеем экземпляр Pt типа cPoint
            'В хештаблице точно есть экземпляр с аналогичным ключем 0;0.
            'Как обратиться к значению???
            If _htCell.ContainsKey(Pt) Then MsgBox("Exists point with row: " & Pt.Row.ToString & " and col: " & Pt.Col.ToString)
            Cl = _htCell.Item(Pt) 'получаем Nothing
        End Function
    End Class
End Module

Запускаем тестирование:


 Private Sub Button7_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button7.Click
        Dim Cl(2) As cCell
        Dim ClTmp As cCell
        Dim i As Integer
        Dim St As New cSheet
        Dim Pt As cPoint
        Dim iRow As Integer = 0
        For i = LBound(Cl) To UBound(Cl)
            Pt = New cPoint
            Pt.Col = i
            Pt.Row = iRow
            Cl(i) = New cCell(Pt, Chr(i + 65) & iRow.ToString)
            St.Add(Cl(i))
        Next
        'точно знаем, что в хештаблице есть элементы с ключами 0;0, 0;1, 0;2
        Pt = New cPoint
        Pt.Col = 0
        Pt.Row = 0
        ClTmp = St.Item(Pt.Row, Pt.Col)
    End Sub

Ответить

  Ответы Всего ответов: 1  

Номер ответа: 1
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #1
Добавлено: 17.02.05 10:54
Можно. Пример:

Dim a As New MyClass
Dim h As New HashTable
h.Add a, "123"
MessageBox.Show h(a).ToString

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам