VBScript: видимость функции внутри класса с идентичным именем свойства - PullRequest
0 голосов
/ 04 марта 2011

Учитывая, что у нас есть скрипт

Option Explicit

Class CClass
    Private m_date

    Private Sub Class_Initialize()
        m_date = CDate("1970-01-01 00:00:00")
    End Sub

    Public Function Foo()
        Dim d : d = Date()
        WScript.Echo "d is " & FormatDateTime(d, vbGeneralDate)
    End Function

    Public Property Get Date()
        Date = m_date
    End Property

    Public Property Let Date(p_date)
        m_date = CDate(p_date)
    End Property

End Class

Dim obj : Set obj = NEW CClass
Call obj.Foo()

Как функция класса CClass.Foo () может вызывать встроенную функцию VBScript Date () без вмешательства свойства CClass.Date?

Мое текущее решение состоит в том, чтобы ввести фиктивную функцию Date_ (), которую можно вызывать вместо этого. Но это только кажется неправильным. Я думаю, что должен быть какой-то способ указать, что мы хотим вызвать что-то вне области видимости класса.

Ответы [ 3 ]

3 голосов
/ 04 марта 2011

Я почти уверен, что в VBScript нет способа сделать то, что вы просите.

Но даже если вы могли бы найти способ сделать это, вы действительно не должны .Вы должны выбрать имена для своих собственных функций, которые не конфликтуют с именами встроенных функций.Все остальное совершенно не поддерживается для динамического языка сценариев, такого как VBScript.

Выберите другое имя для вашего свойства Date.Желательно что-то более информативное : какую дату возвращает это свойство?Что относится к дате?Как это может быть использовано?Что бы вы ни делали, не переименовывайте его в Date_ - это не лучше.

1 голос
/ 04 марта 2011

Вы можете вызвать его изнутри класса, например: Dim d : d = me.Date()

Me в VBScript - это то же самое, что вы используете This в Javascript, например

0 голосов
/ 11 января 2018

Слишком поздно для вечеринки, но есть решение, использующее функцию eval. подробности см. В документации по eval

Class CClass
    Private m_date

    Private Sub Class_Initialize()
        m_date = CDate("1970-01-01 00:00:00")
    End Sub

    Public Function Foo()
        Dim d : d = eval("Date()")
        WScript.Echo "d is " & FormatDateTime(d, vbGeneralDate)
    End Function

    Public Property Get Date()
        Date = m_date
    End Property

    Public Property Let Date(p_date)
        m_date = CDate(p_date)
    End Property

End Class

Dim obj : Set obj = NEW CClass
Call obj.Foo()
...