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 é:
Como explicar isto? Por favor, ajuda-me.o objecto Microsoft VBScript runtime (0x800A01B6) não suporta esta propriedade ou método: 'CategoryVar'".
5
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
.
<%
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