【问题标题】:Class Structure in classic asp经典asp中的类结构
【发布时间】:2012-01-09 09:20:25
【问题描述】:

我需要在经典的 asp 中使用类结构。我写了以下三个类。

类别.asp

<%

Class Category

    Private NameVar

    Public Property Get Name()
        Name = NameVar
    End Property

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

End Class

%>

项目.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>

当我运行这段代码时,我发现了一些问题。错误是:

Microsoft VBScript 运行时 (0x800A01B6) 对象不支持此属性或方法:“CategoryVar”。

这怎么解释?请帮帮我。

【问题讨论】:

  • 你试过Set ItemVar.Category = CategoryVar吗?
  • 我已经重现了你的错误,很奇怪!

标签: asp-classic


【解决方案1】:

在 VBScript 中,如果您知道属性将包含对象引用,则必须使用 Property Set 语句定义它。此外,在将对象引用分配给变量时,您必须使用Set 语句。考虑到这一点,需要进行以下更改:

项目.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

%>

【讨论】:

    【解决方案2】:

    我已经测试了你上面的代码,虽然我确实得到了一个错误,但它不是你提到的那个。

    首先,您在Item 类中定义了两次Name,一次应该是Item。其次,您分配了ItemVar.Category = CategoryVar,但Item 类没有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>
    

    【讨论】:

    • 仅供参考,自发布此答案以来,该问题已被编辑。您提到的错字不再出现在问题中。
    【解决方案3】:

    我遇到了和 Rory 一样的问题,重新定义名称,并且没有 Category 属性。

    我已调整以下代码以考虑编辑后的问题:

    不应该像下面这样吗?

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多