2014-08-29 7 views
0

Я уже знаю, что вы создаете интерфейс внутри VB6. Классы, реализующие интерфейс, должны реализовывать ВСЕ процедуры. Есть ли способ создать нечто вроде абстрактного класса, который может реализовать некоторые подпрограммы. Производный класс должен реализовывать абстрактные процедуры и может переопределять подпрограммы, уже реализованные абстрактным классом.Переопределение абстрактных классов в VB6

Обратите внимание, что мы говорим о VB6, а не VB.NET или вообще. Спасибо

+0

Нет простого способа. Вот некоторые ссылки на описания некоторых обходных решений. [Журнал MSDN] (http://msdn.microsoft.com/en-us/library/aa260821 (v = vs.60) .aspx) и [Rockford Lhotka] (http://www.lhotka.net/Article. ASPX? ID = 5f76a91c-5a75-49e1-9379-6d2807653b68). – MarkJ

ответ

0

Одна работа вокруг я использую, чтобы иметь экземпляр базового класса в качестве частного члена:

Implements Shape 

Dim base as Shape 
Dim radius as Single 

Public Function Shape_Area() as Single 
    Shape_Area = pi*pi*radius 
End Sub 

Public Function Shape_PenColour() as Long 
    Shape_PenColour = base.PenColour() ' let the base do its thing 
End Function 

Вы могли бы работать иерархию подобного (на площади):

Implements Shape 

Dim base as Rectangle 

Public Function Shape_Area() as Single 
    Shape_Area = base.Area() ' which is Rectangle.Shape_Area which then calls the Shape.Area 
End Sub 

Это означает, что каждый класс должен действительно знать о том, из какого он происходит. Это может быть или не быть проблемой для вас. Я использовал его, и он работает хорошо.

Это означает, что вы должны делать больше работы, и каждый класс явно

0

Visual Basic 6 не поддерживает наследование реализации, только наследование интерфейса. Вы можете узнать больше об этом Here. Есть хорошая статья here о интерфейсах и наследовании в VB6, что может привести к решению вашей проблемы в рамках возможностей VB6.

+0

Вот чего я боялся. Там есть работа, которую я выложу в качестве ответа. –

0

работы вокруг (не раствор):

интерфейс, например, определяет рутинную А и В, реализации второй.
Производный класс имеет частный член, являющийся экземпляром интерфейса.
Реализация процедуры B просто вызывает этот метод в его частном члене.
Конечно, мы имеем дело с двумя разными объектами, но в некоторых случаях это может быть достаточно хорошим.

0

Наследование реализации находится над рейтингом и почти всегда заканчивается со сложными конструкциями.

Что вы хотите сделать достижения (обеспечить базовые осущ, уменьшить повторение кода в производных классах, и т.д.) может быть сделано с составом и событий

Рассмотрим интерфейс IBase

Public Function GetArea() As Double 

End Function 

интерфейс IDerived

Property Get Base() As IBase 

End Property 

Общая реализация StdBaseImpl от IBase

Implements IBase 

Event CustomizeArea(Value As Double) 

Public Function GetArea() As Double 
    GetArea = 42 
    RaiseEvent CustomizeArea(GetArea) 
End Function 

Private Function IBase_GetArea() As Double 
    IBase_GetArea = GetArea 
End Function 

Тогда для производных классов, которые вы используете композицию и выбрать, какие базовые события для реализации

Implements IDerived 

Private WithEvents m_oBase As StdBaseImpl 

Private Property Get IDerived_Base() As IBase 
    Set IDerived_Base = m_oBase 
End Property 

Private Sub m_oBase_CustomizeArea(Value As Double) 
    Value = Value + 10 
End Sub 

Вы можете создать базы с BeforeXxx + Cancel и AfterXxx событий. Вы можете разорвать несколько баз и скоординировать их.

Смежные вопросы