Реализация в VB.NET в интерфейсе другого интерфейса

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Реализация в VB.NET в интерфейсе другого интерфейса

Сообщение Anatoliy » 06.09.2005 (Вт) 13:59

Добрый день
Возможно ли реализовать в VB.NET в интерфейсе другой интерфейс.
Поясню. Нашел на http://www.aspnetmania.com/Code/Code/87.html полезный класс, необходимость в котором чувствовал давно (но не знал как реализовать :) )
Код класса написан на C#.
Решил транслировать. И сразу же наступаю на грабли:
Исходный код:

Код: Выделить всё
using System;
   using System.Collections;
   
   namespace WJ.Mosaic.Collections
   {
      public interface IKeyListCollection : ICollection
      {
         object this[int pos] { get; }
         object this[object key] { get; }
        int Add(object key, object value);
        int GetIndex(object key);
        object GetKey(int index);
     }
  }

Переписываю на VB.NET:

Код: Выделить всё
Imports System
Imports System.Collections
Namespace WJ.Mosaic.Collections
    Module modKeyListCollection
        Public Interface IKeyListCollection
        Implements ICollection
    End Interface
    End Module
End Namespace


На строке "Implements ICollection" получаю ругательство: "'Implements' not valid in Modules."
Что не так?
Anatoliy

lord0n
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 845
Зарегистрирован: 30.06.2005 (Чт) 9:55
Откуда: Moskow

Сообщение lord0n » 06.09.2005 (Вт) 14:17

Я вот тут подумал: а для чего админы создавали ветку про VB.NET?
Теория - это когда что-то не работает и известно почему.
Практика - это когда что-то работает, но неизвестно почему.
Нам удалось совместить теорию с практикой, теперь ничего не работает и неизвестно почему.

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 06.09.2005 (Вт) 14:21

Интерфейс для интерфейса не имплементится, а наследуется.
Последний раз редактировалось Sebas 06.09.2005 (Вт) 14:25, всего редактировалось 1 раз.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 06.09.2005 (Вт) 14:21

Implements надо вставлять в класс

Anatoliy
Новичок
Новичок
 
Сообщения: 28
Зарегистрирован: 12.01.2005 (Ср) 18:13
Откуда: Kiev

Сообщение Anatoliy » 06.09.2005 (Вт) 18:42

Я вот тут подумал: а для чего админы создавали ветку про VB.NET?
Сорри. Решил, что ветка для новичков в VB.NET (ну вроде меня :)

Поступил по совету Konst One - в самом классе добавил несколько Implements:

Код: Выделить всё
Imports System
Imports System.Collections
Imports System.Text
Imports Microsoft.VisualBasic.ControlChars
Module modKeyListCollection
    '//http://www.aspnetmania.com/Code/Code/87.html
    '//Иногда нужно иметь под руками такую коллекцию, что бы к элементам которой,
    '//можно обращатся как по индексу, так и ключу. Собственно вот.

    Public Interface IKeyListCollection
        ReadOnly Property Item(ByVal pos As Int32) As Object
        ReadOnly Property Item(ByVal key As Object) As Object
        Function Add(ByVal key As Object, ByVal value As Object) As Int32
        Function GetIndex(ByVal key As Object) As Int32
        Function GetKey(ByVal index As Int32) As Object
    End Interface

    Public Class cKeyListCol
        Implements IKeyListCollection
        Implements ICollection
        Implements IEnumerable
        Implements IEnumerator

        Dim _Keys As Hashtable = New Hashtable 'key - ключ элемента, value - index из _List
        Dim _List As ArrayList = New ArrayList 'а здесь будем хранить сами объекты
        Dim _Index As Int32 = -1

#Region "IKeyListCollection Members"

        Public Overloads ReadOnly Property Item(ByVal pos As Integer) As Object Implements IKeyListCollection.Item
            Get
                Return _List(index:=pos)
            End Get
        End Property

        Public Overloads ReadOnly Property Item(ByVal key As Object) As Object Implements IKeyListCollection.Item
            Get
                Dim index As Int32 = CType(_Keys.Item(key:=key), Int32)
                Return _List.Item(index:=index)
            End Get
        End Property

        Public Function Add(ByVal key As Object, ByVal value As Object) As Int32 Implements IKeyListCollection.Add
            Dim index As Int32 = -1
            If _Keys.ContainsKey(key:=key) = False Then
                index = _List.Add(value:=value)
                _Keys.Add(key:=key, value:=index)
            Else
                index = GetIndex(key:=key)
                _List.Item(index:=index) = value
            End If
            Return index
        End Function

        Public Function GetIndex(ByVal key As Object) As Integer Implements IKeyListCollection.GetIndex
            Dim index As Int32 = -1
            If _Keys.ContainsKey(key:=key) = True Then
                index = CType(_Keys.Item(key:=key), Int32)
            End If
            Return index
        End Function

        Public Function GetKey(ByVal index As Integer) As Object Implements IKeyListCollection.GetKey
            Dim key As Object
            For Each key In _Keys.Keys
                If CType(_Keys.Item(key:=key), Int32) = index Then
                    Return key
                End If
            Next
            Return Nothing
        End Function

#End Region '"IKeyListCollection Members"

#Region "ICollection Members"
        Public Sub CopyTo(ByVal array As System.Array, ByVal index As Integer) Implements System.Collections.ICollection.CopyTo
            _List.CopyTo(array, index)
        End Sub

        Public ReadOnly Property Count() As Integer Implements System.Collections.ICollection.Count
            Get
                Return _List.Count
            End Get
        End Property

        Public ReadOnly Property IsSynchronized() As Boolean Implements System.Collections.ICollection.IsSynchronized
            Get
                Return _List.IsSynchronized
            End Get
        End Property

        Public ReadOnly Property SyncRoot() As Object Implements System.Collections.ICollection.SyncRoot
            Get
                Return _List.SyncRoot
            End Get
        End Property

#End Region '"ICollection Members"

#Region "IEnumerable Members"
        Public Function GetEnumerator() As System.Collections.IEnumerator Implements System.Collections.IEnumerable.GetEnumerator
            Return _List.GetEnumerator
        End Function
#End Region '"IEnumerable Members"

#Region "IEnumerator Members"

        Public ReadOnly Property Current() As Object Implements System.Collections.IEnumerator.Current
            Get
                If _Index > -1 Then
                    Return _List(_Index)
                Else
                    If _List.Count > 0 Then
                        _Index = 0
                        Return _List(_Index)
                    Else
                        Return Nothing
                    End If
                End If
            End Get
        End Property

        Public Function MoveNext() As Boolean Implements System.Collections.IEnumerator.MoveNext
            Dim iCount As Integer = _List.Count - 1
            If _Index < iCount Then
                _Index += 1
                Return True
            Else
                _Index = -1
                Return False
            End If
        End Function

        Public Sub Reset() Implements System.Collections.IEnumerator.Reset
            _Index = -1
        End Sub

#End Region '"IEnumerator Members"

    End Class 'cKeyListCol

#Region "Testing class"
    Public Sub TestClasscKeyListCol()
        Dim mKeyList As New cKeyListCol
        Dim sB As New StringBuilder
        mKeyList.Add(key:="First", value:="FirstObject")
        mKeyList.Add(key:="Second", value:="SecondObject")
        mKeyList.Add(key:="Third", value:="ThirdObject")
        mKeyList.Add(key:="Fourth", value:="ForthObject")
        mKeyList.Add(key:="Fifth", value:="FifthObject")
        Dim sKey As String
        For Each sKey In mKeyList
            sB.Append(sKey & CrLf)
        Next
        MsgBox(sB.ToString)
    End Sub
#End Region '"Testing class"

End Module
Anatoliy

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 06.09.2005 (Вт) 19:11

Anatoliy

Чёто я не понял, ну и нах ты эту муть выложил?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: SemrushBot и гости: 48

    TopList