Estrutura das classes no asp clássico

Preciso de usar a estrutura de classes no asp clássico. Escrevi depois de três aulas.

Categoria.asp

<%

Class Category

    Private NameVar

    Public Property Get Name()
        Name = NameVar
    End Property

    Public Property Let Name(nameParam)
        NameVar = nameParam
    End Property

End Class

%>

Item.asp

<%

Class Item

    Private NameVar
        Private CategoryVar

    Public Property Get Name()
        Name = NameVar
    End Property

    Public Property Let Name(nameParam)
        NameVar = nameParam
    End Property

    Public Property Get Category()
        category = categoryVar
    End Property

    Public Property Let Category(categoryParam)
    CategoryVar = categoryParam
    End Property

End Class

%>
Teste.asp

<%

    Dim CategoryVar
    Set CategoryVar = New Category

    CategoryVar.Name = "Weight"

    Dim ItemVar
    Set ItemVar = New Item

    ItemVar.Name = "kg"
    ItemVar.Category = CategoryVar

%>
<html>
    <head>
        <title>UoM Componet Testing</title>
    </head>
    <body>
        <%= ItemVar.Name %><br/>
    </body>
</html>
Quando corri este código, encontrei um problema. O erro é:

o objecto Microsoft VBScript runtime (0x800A01B6) não suporta esta propriedade ou método: 'CategoryVar'".

Como explicar isto? Por favor, ajuda-me.

Author: zanhtet, 2012-01-09

3 answers

Em VBScript, se você sabe que uma propriedade conterá uma referência de objeto, você deve defini-la usando o Property Set declaração. Além disso, deve utilizar o Set declaração ao atribuir referências de objectos a variáveis. Com isso em mente, as seguintes mudanças devem ser feitas:

Item.asp

Class Item

    '<snip>

    Public Property Get Category()
        ' Add Set here
        Set category = categoryVar
    End Property

    ' Change "Property Let" to "Property Set"
    Public Property Set Category(categoryParam)
        Set CategoryVar = categoryParam
    End Property

End Class
Teste.asp
<%
    ' <snip>    

    ItemVar.Name = "kg"
    Set ItemVar.Category = CategoryVar

%>
 8
Author: Cheran Shunmugavel, 2012-01-09 19:34:21
Testei o teu código acima e, embora tenha tido um erro, não foi o que mencionaste.

Primeiro de tudo você está definindo Name duas vezes na classe Item, Um deve ser Item. Em segundo lugar, você atribui ItemVar.Category = CategoryVar Ainda assim a classe Item não tem Propriedade Category.

Aqui está o código que usei para testar e funciona bem.
<%
    Class Category
        Private NameVar

        Public Property Get Name()
            Name = NameVar
        End Property

        Public Property Let Name(nameParam)
            NameVar = nameParam
        End Property
    End Class

    Class Item
        Private NameVar
        Private ItemVar

        Public Property Get Name()
            Name = NameVar
        End Property

        Public Property Let Name(nameParam)
            NameVar = nameParam
        End Property

        Public Property Get Item()
            Item = ItemVar
        End Property

        Public Property Let Item(itemParam)
            ItemVar = itemParam
        End Property
    End Class

    Dim CategoryVar
    Set CategoryVar = New Category

    CategoryVar.Name = "Weight"

    Dim ItemVar
    Set ItemVar = New Item

    ItemVar.Name = "kg"
    'ItemVar.Category = CategoryVar ' There is no 'Category' property in your class
%>

<html>
    <head>
        <title>UoM Componet Testing</title>
    </head>
    <body>
        <%= ItemVar.Name %><br/>
    </body>
</html>
 0
Author: Rory McCrossan, 2012-01-09 09:40:37
Encontrei os mesmos problemas que a Rory, redefinindo o nome, e não há nenhuma propriedade de categoria.

Ajustei o código abaixo para ter em conta a pergunta editada:

Não deveria ser algo como em baixo?
Class Item      
    Private NameVar   
    Public Property Get Name()         
        Name = NameVar     
    End Property      
    Public Property Let Name(nameParam)         
        NameVar = nameParam     
    End Property      

    Private CategoryVar   
    Public Property Get Category()         
        Category = CategoryVar     
    End Property      
    Public Property Let Category(CategoryParam)         
        CategoryVar = CategoryParam     
    End Property 
End Class 




Dim CategoryVar     
Set CategoryVar = New Category      
CategoryVar.Name = "Weight"      

Dim ItemVar     
Set ItemVar = New Item      
ItemVar.Name = "kg"     
ItemVar.Category = CategoryVar.Name
 0
Author: Nicholas Murray, 2012-01-09 10:12:17