2011-08-11 2 views
3

저는 다양한 소스의 데이터를 쿼리하는 데 사용되는 많은 클래스가있는 의 프로젝트를 진행하고 있습니다. 이 클래스들은 비슷하기 때문에 공용 인터페이스를 사용하고 Implements 문을 사용하는 것이 적합한 옵션인지 확인하려고합니다. 나는 OOP에 상당히 익숙하다. (VBA가 아닌 언어로 배우려고 노력하고 있음에도), 나는 VBA에있는 OOP가 원하는대로 떠난다는 것을 이해한다.VBA에서 클래스 그룹에 대한 공통 속성 집합을 설정하는 방법이 있습니까?

기본적으로 내가 읽고있는 정보는 우리가 IBaseInfo를 호출하여 인터페이스 클래스, 설정한다고

:

Public Property Let LocationData(ByRef locDATA As udtLocData) 

End Property 

Public Property Let ReferenceDate(ByVal dteDATE As Date) 

End Property 

그런 다음 당신은 실제로 우리가 호출 클래스에 IBaseInfo 구현을 clsRate5pt :

Implements IBaseInfo 

Private Property Let IBaseInfo_LocationData(RHS As udtLocData) 

End Property 

Private Property Let IBaseInfo_ReferenceDate(ByVal RHS As Date) 

End Property 

여기서 혼란스러워하는 부분은 실제로 모듈의 개체 수준에서 속성에 액세스하는 방법입니다. msdn에서 VBA 다형성에 대한 참조에서 얻는 것은 실제로 IBaseInfo 유형의 변수를 선언하고, clsRate5pt 유형의 객체와 동일하게 설정하고 해당 변수를 통해 속성에 액세스해야한다는 것입니다. 예를 들면 :

Sub TestIFace() 

    Dim o5PT As clsRate5Pt 
    Dim oInfo As IBaseInfo 

    Set o5PT = New clsRate5Pt 
    Set oInfo = o5PT 

    oInfo.LocationData = '// Some location Data 
    oInfo.ReferenceDate = '// Some Reference Date 

End Sub 

의 클래스 그룹에 대한 인터페이스의 공통 집합을 설정하는 방법이 있나요? Implements가는 길이고, 그렇다면 무엇이 잘못 되었습니까?

다른 개체를 통해 속성에 액세스하는 것은 반 직관적 인 것처럼 보입니다. clsRate5pt이 인터페이스를 "구현"하는 경우 clsRate5pt을 통해 해당 속성에 액세스 할 수있는 방법이 없습니까?

답변

5

VBA 당신이 아마이 경우에이 방법을 사용할 수 있지만 않는 지원 구성 ("이있는"), 그래서 ("는 것입니다") 상속을 지원하지 않습니다

예 : 클래스 "clsSettings"가 공통 속성 및 다른 클래스에서 구현하려는 모든 필수 속성 값 확인

귀하의 다른 클래스는 다음과 같이 노출 될 수 귀하의 "설정"의 인스턴스가 : 클래스에서, 그리고 인터페이스 iFooBar

Option Explicit 
Public Property Get Foo() as String 

End Property 

Public Property Get Bar() as String 

End Property 

를 들어

objRate5pct.Settings.LocationData 
objRate5pct.Settings.ReferenceDate 
+0

감사의 말 Tim ... 내가 'public 속성 가져 오기() 설정을 (를) clsSettings'클래스에 실제로 표시하겠습니까? 그것은 내가 찾고있는 것에 더 가깝게 보인다. 도움을 주셔서 감사합니다 –

+0

예, 그게 전부입니다. –

0

(우리는 부를 것이다 cFooBar)

Option Explicit 
Implements iFooBar 

'Other class code 

Public Property Get AsiFooBar() as iFooBar 
    Set AsiFooBar = me 
End Property 

'More code 

그런 다음 모듈에서 iFooBar 메서드를 참조 할 수 있습니다.

dim cfb as cFooBar 
set cfb = new cFooBar 
debug.print cfb.AsiFooBar.Foo 
관련 문제