Vb6 - доступ к переменным класса через древовидную структуру

  • Автор темы yxoglyxo
  • Дата начала
Y

yxoglyxo

Гость
#1
Всем привет!

задача:

есть Private класс clsCollaring
В классе объявлены следующие переменные:

Private Type Band
Decrease As Double
Collaring As Double
End Type

Private Type NCDType
NCDType_5_Plus(4) As Band
NCDType_Increased(4) As Band
NCDType_Equal(4) As Band
NCDType_All(4) As Band
End Type


Private Type PolicyType
PolicyOddNumbers As NCDType
PolicyEvenNumbers As NCDType
PolicyAllNumbers As NCDType
End Type

Public mudtprops As PolicyType


Такая структура переменных сделана для того чтобы получить к переменным следующим образом:

dim MyCollar as clsCollaring
set MyCollar = new clsCollaring

доступ к переменным (разумеется это не работает, так как переменные Private, но показываю как "в идеале" должно быть):

MyCollar.PolicyOddNumbers.NCDType_5_Plus(0).Decrease=10
MyCollar.PolicyOddNumbers.NCDType_5_Plus(0).Collaring=5

MyCollar.PolicyOddNumbers.NCDType_5_Plus(1).Decrease=20
MyCollar.PolicyOddNumbers.NCDType_5_Plus(1).Collaring=10

MyCollar.PolicyOddNumbers.NCDType_5_Plus(2).Decrease=40
MyCollar.PolicyOddNumbers.NCDType_5_Plus(2).Collaring=30

MyCollar.PolicyOddNumbers.NCDType_5_Plus(3).Decrease
MyCollar.PolicyOddNumbers.NCDType_5_Plus(3).Collaring

MyCollar.PolicyOddNumbers.NCDType_5_Plus(4).Decrease
MyCollar.PolicyOddNumbers.NCDType_5_Plus(4).Collaring

далее следующий NCD_Type:

MyCollar.PolicyOddNumbers.NCDType_Increased(0).Decrease
MyCollar.PolicyOddNumbers.NCDType_Increased(0).Collaring

MyCollar.PolicyOddNumbers.NCDType_Increased(1).Decrease
MyCollar.PolicyOddNumbers.NCDType_Increased(1).Collaring

перебрав все NCDType переключаемся на следующую PolicyEvenNumbers:

MyCollar.PolicyEvenNumbers.NCDType_5_Plus(0).Decrease=10
MyCollar.PolicyEvenNumbers.NCDType_5_Plus(0).Collaring=5

MyCollar.PolicyEvenNumbers.NCDType_5_Plus(1).Decrease=20
MyCollar.PolicyEvenNumbers.NCDType_5_Plus(1).Collaring=10

и т.д.

Т.е фактически хочу следующую структуру:

-PolicyODD
--------NCDType_5_Plus
--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
-------------------------Collaring
--------------------Band3
-------------------------Decrease
-------------------------Collaring
--------------------Band4
-------------------------Decrease
-------------------------Collaring
--------------------Band5
-------------------------Decrease
-------------------------Collaring

--------NCDType_Increased
--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
-------------------------Collaring

.....и т.д.
--------NCDType_Equal
--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
-------------------------Collaring

.....и т.д.

--------NCDType_All

--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
-------------------------Collaring

.....и т.д.

то же самое для
-PolicyEven
--------NCDType_5_Plus
--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
-------------------------.....и т.д.

ну и соответственно для PolicyALL:
-PolicyALL
--------NCDType_5_Plus
--------------------Band1
-------------------------Decrease
-------------------------Collaring
--------------------Band2
-------------------------Decrease
.....и т.д.


Вопрос:

поскольку в самом классе присутствует :

Public mudtprops As PolicyType
Как раз mudtprops и имеет вышеуказанную древовидную структуру ВНУТРИ класса. Но когда создаю экземпляр класса (класс Private - нельзя сделать Public), то теряю доступ к переменным класса, то есть не имею доступа ни к одной из переменных.
Теперь вопрос - поскольку мне нужна именно вышеуказанная древовидная структура - как можно ее получить? ("рисовать" свойства для класса бессмысленно- нарушается древовидность: т.е конечно фактически доступ к переменным получить можно через свойства, но этот доступ не обеспечивает вышеописанное дерево.)
Единственное до чего пока додумалась - это насоздавать дополнительных классов: класс Band со свойствами Decrease и Collaring, его родитель - класс NCDType, а его родитель - класс Policy Но это решение какое-то тупое. Может есть другое?
Любые предложения, советы или мысли в вслух очень приветствуются.

Зараннее всем спасибо
 
S

skysun

Гость
#2
Я не совсем понял ход твоей мысли, но, по-моему, Вы усложняете. В VB есть коллекции, которые могут содержать в т.ч. и другие коллекции. Можно легко создать любую древовидную структуру.
-colA
|_colB
| |_var1
| |_varN
|_colC

и т.д