asp classic - tutorial - Estructura de clase en asp clásico
hello world asp classic (3)
Necesito usar la estructura de clase en asp clásico. He escrito siguientes tres clases.
Category.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
%>
Test.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>
Cuando ejecuto este código, he encontrado algún problema. El error es:
Microsoft VBScript runtime (0x800A01B6) El objeto no admite esta propiedad o método: ''CategoryVar'' ".
¿Cómo puede explicar esto? Por favor, ayúdame.
En VBScript, si sabe que una propiedad contendrá una referencia de objeto, debe definirla utilizando la instrucción de Property Set
. Además, debe usar la instrucción Set
al asignar referencias de objeto a variables. Con eso en mente, los siguientes cambios deben hacerse:
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
Test.asp
<%
'' <snip>
ItemVar.Name = "kg"
Set ItemVar.Category = CategoryVar
%>
Encontré los mismos problemas que Rory, la redefinición del nombre y la ausencia de una propiedad de categoría.
He ajustado el código a continuación para tener en cuenta la pregunta editada:
¿No debería ser algo como abajo?
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
Probé tu código anterior y, aunque recibí un error, no es el que mencionaste.
En primer lugar, está definiendo Name
dos veces en la clase Item
, uno debe ser Item
. En segundo lugar, asigna ItemVar.Category = CategoryVar
pero la clase Item
no tiene ninguna propiedad de Category
.
Aquí está el código que usé para probar y funciona bien:
<%
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>