Не могу реализовать класс в VB6 - PullRequest
5 голосов
/ 19 октября 2010

Я пытаюсь реализовать интерфейс в VB6.Я определил класс Cast_Speed вот так ...

Public Function Run_Time() As Long

End Function

и реализацию вроде этого ...

Option Explicit
Implements Cast_Speed

Public Function Cast_Speed_Run_Time() As Long
    Cast_Speed_Run_Time = 0
End Function

, но попытка его скомпилировать дает 'объектному модулюреализовать «Run_Time» для интерфейса «Cast_Speed».Кто-нибудь может увидеть, что я делаю не так?С моими подпрограммами все в порядке, но у всех функций, которые я пробую, есть эта проблема.

Ответы [ 4 ]

14 голосов
/ 19 октября 2010

Не нравится знак подчеркивания в имени метода. Попробуйте использовать RunTime() вместо этого.

Я только что проверил это без подчеркивания, и оно прекрасно работает для меня:

'// class Cast_Speed
Option Explicit

Public Function RunTime() As Long

End Function


'// class Class1
Option Explicit

Implements Cast_Speed

Public Function Cast_Speed_RunTime() As Long
  Cast_Speed_RunTime = 0
End Function
5 голосов
/ 30 октября 2010

Хотя вы можете сделать реализацию интерфейса общедоступной, это не считается хорошей практикой, равно как и хорошей практикой, позволяющей напрямую создавать экземпляр интерфейса, как вы можете это сделать. Это просто пример из принципа, что можно написать очень плохой код на VB6. :)

Лучшая практика выглядит следующим образом:

  1. Свойство экземпляра интерфейса - PublicNotCreatable.
  2. Реализованные методы интерфейса находятся в области конфиденциальности.

Таким образом:

Dim x as iMyInterface
Set x = new MyiMyInterfaceImplementation
x.CalliMyInterfaceMethodA
x.CalliMyInterfaceMethodY

И так далее. Если кто-то пытается напрямую создать экземпляр интерфейса, это должно вызвать ошибку, и если кто-то пытается вызвать реализованный метод напрямую, а не полиморфно через интерфейс, который также должен вернуть ошибку.

2 голосов
/ 19 октября 2010

Если я не ошибаюсь, реализации интерфейса в VB6 должны быть частными (даже если интерфейс объявляет их как публичные).

Попробуйте изменить:

Public Function Cast_Speed_Run_Time() As Long

Кому:

Private Function Cast_Speed_Run_Time() As Long

Вы также можете прочитать о реализации интерфейсов в VB6 здесь (что, похоже, поддерживает меня).

1 голос
/ 24 февраля 2012
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...