Классовая структура в классическом жерех - PullRequest
5 голосов
/ 09 января 2012

Мне нужно использовать структуру класса в классическом ASP.Я написал следующие три класса.

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>

КогдаЯ запускаю этот код, я обнаружил некоторые проблемы.Ошибка:

Microsoft VBScript runtime (0x800A01B6) Объект не поддерживает это свойство или метод: 'CategoryVar' ".

Как это объяснить? Пожалуйста, помогите мне.

Ответы [ 3 ]

8 голосов
/ 09 января 2012

В VBScript, если вы знаете, что свойство будет содержать ссылку на объект, вы должны определить его с помощью оператора Property Set.Кроме того, вы должны использовать оператор Set при назначении ссылок на объекты переменным.Учитывая это, необходимо внести следующие изменения:

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

%>
0 голосов
/ 09 января 2012

Я столкнулся с теми же проблемами, что и Рори, с переопределением имени и отсутствием свойства 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
0 голосов
/ 09 января 2012

Я протестировал ваш код выше и, хотя я получил ошибку, это не тот, который вы упомянули.

Прежде всего вы определяете Name дважды в классе Item, один должен быть 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...