Определяет метод и функции событий и процедуры для определения класса.

[[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name[_ACCESS |_ASSIGN]
   ([cParamName | cArrayName[] [AS Type][@]]) [AS Type]
   [HELPSTRING cHelpString] | THIS_ACCESS(cMemberName) [NODEFAULT]
      cStatements
[ENDFUNC | ENDPROC]]

Параметры

[[PROTECTED | HIDDEN] FUNCTION | PROCEDURE Name [_ACCESS | _ASSIGN]

Определяет события и методы для создания в определения класса. События и методы создаются как функции или процедуры. Вы можете создать функцию события или процедуру, чтобы обработать событие. Для подробной информации, см. Пользовательские Процедуры и Функции , FUNCTION Команда , и PROCEDURE Команда .
Обратите внимание:
Вызов функций событий и процедур выполняет код, определенный для этих функций и процедур, но не вызывает срабатывания события непосредственно.

Для подробной информации о событиях в Visual FoxPro, см. Понимание Модели Событий . Вы можете создать функцию или процедуру метода, которая воздействует на объект, созданный в определении класса.
Обратите внимание:
Вы должны объявить каждый защищенный метод на отдельной строке.

Суффиксы _ACCESS или _ASSIGN определяют создание методов Access или Assign для свойства с тем же самым именем. По умолчанию, методы Access и Assign защищены, так что Вы не можете обратиться или измененить Access или Assign методы извне класса. Для подробной информации, см. Методы Access and Assign и Как: Создать Методы Access и Assign .
Обратите внимание:
Массивы передаются в метды Access и Assign тем же самым способом как в стандартные процедуры Visual FoxPro. Для подробной информации, см. Передача Данных в Параметры .

([ cParamName | cArrayName [] [AS Type ][@]]) [AS Type ]

Специфицирует один или более параметров для передачи аргументов в метод класса или события или определяет имя массива, используемого, чтобы создать библиотеку типов.
Обратите внимание:
При определении массива, Вы должны использовать скобки ([]). DEFINE CLASS не распознает круглые скобки (()).

Для параметров, первое AS Type предложение определяет тип данных параметра. Для массивов, первое AS Type предложение определяет тип, который должен быть допустимым COM типом данных. Для подробной информации, см. таблицу в разделе Замечаний. Типом может также быть ссылка на COM CoClass ProgID типа ADODB.RecordSet. Вы можете определить ProgIDs с или без кавычек (" "). Если Вы используете допустимое COM CoClass ProgID для AS Type предложение, Visual FoxPro включает его в библиотеку типов. Например, следующий метод:
Скопировать код
PROCEDURE Test(oRS AS ADODB.Recordset @) AS ADODB.Recordset
Создает вхождение в библиотеке типов:
Скопировать код
Recordset Test([in, out] Recordset** oRS);
Обратите внимание:
Для массивов, Вы не можете определить ссылку на ProgID, который сгенерирован из библиотеки типов. Например, Вы не можете ссылаться на класс, который содержится в том же самом COM сервере.

Если Вы определяете массив с типом для первого AS Type предложениф, Visual FoxPro создает SAFEARRAY с указанным типом. Если Вы определяете массив без типа для первого AS Type предложениф, Visual FoxPro создает SAFEARRAY с типом данных Variant . Если Вы определяете недопустимый тип, Visual FoxPro по умолчанию использует тип Variant . Для подробной информации о безопасных массивах, см. раздел Замечаний. Символ ( @ ) определяет, что параметры или массивы передаются в функцию или процедуру по ссылке.
Обратите внимание:
По умолчанию, данные передаются в параметры определяемых пользователем процедурах по ссылке, а в определяемых пользователем функциях - по значению. Чтобы передавать массив целиком, Вы должны передать его по ссылке. Для подробной информации, см. Передача Данных в Параметрах .

Обратите внимание:
Вы можете использовать первое AS предложение для строгого контроля типов, использования возможностей IntelliSense, и для сохранения информации определения класса в библиотеке типов (OLEPUBLIC). Однако, Visual FoxPro не осуществляет контроль соответствия типов при трансляции или выполнении кода, так что Вы должны удостовериться в том, что Вы используете допустимые типы данных. Для массивов, строгий контроль типов используется прежде всего для создания библиотеки типов и не осуществляется в run time. Используя предложение cArrayName [] [AS Type ] [] , Вы можете определить строгий контроль типов для массивов, так что они могут быть правильно написаны как безопасные массивы в библиотеке типов. Строгое типизация также рекомендуется для использованиясовместно с методами интерфейса, указанными предложением IMPLEMENTS . Для подробной информации, см. Как: Обеспечить Строгий контроль типов для кода Класса, Объекта, и Переменных .

Второе предложение AS Type указывает тип возвращаемого значения функции.
Обратите внимание:
Вы не можете определить массивы как типы для возвращения. Например, в то время как следующий код является допустимым, он возвращает библиотечный тип как VARIANT и не SAFEARRAY:

Скопировать код
PROCEDURE GetWidgets() AS aWidgets[]
ENDPROC
Совет:
Если метод не возвращает значение, используйте AS VOID как возвращаемое значение. Это требуется для некоторых технологий типа Microsoft COM+, Services Queued Components.

Если Вы хотите чтобы параметры и их типы появились в библиотеке типов, Вы должны использовать встроенный синтаксис задания параметра вместо команды LPARAMETERS , чтобы объявить параметры, например:
Скопировать код
FUNCTION myMeth(parm1 AS Integer @, parm2 AS String) AS Integer
ENDFUNC
[HELPSTRING cHelpString ]

Определяет строку, чтобы добавить её к библиотеке типов как описание функциональных возможности метода для отображения в объектном браузере или IntelliSense.
THIS_ACCESS( cMemberName )

Определяет, чтобы создать процедуру или функцию THIS_ACCESS , которая выполниться, когда запрашивается или изменяется значение члена объекта. Для подробной информации, см. Access and Assign Methods и How to: Создать Методы Access and Assign .
[NODEFAULT]

Препятствует Visual FoxPro выполнять заданное по умолчанию событие или код метода для событий Visual FoxPro и методов. Для подробной информации, см. NODEFAULT Команда .
cStatements

Определяет код для выполнения при вызове функции или процедуры для события или метода класса.
Совет:
Вы можете определить, что функции и процедуры событий и методов могут принимать значения включением инструкции PARAMETERS или LPARAMETERS в качестве первой выполнимой строк функции или процедуры. Для подробной информации, см. PARAMETERS Команда и LPARAMETERS Команда .

[ENDFUNC | ENDPROC]]

Указывает конец определения функции или процедуры. В отличие от большинства ключевых слов Visual FoxPro, Вы не можете сокращать ENDFUNC и ENDPROC потому что они может конфликтовать с ключевыми словами ENDFOR и ENDPRINTJOB .

Замечания

Следующий код показывает резюме основных предложений команды DEFINE CLASS :

Скопировать код
DEFINE CLASS Clause
   [Property_Definition_Clause]
   [PEMName_COMATTRIB Clause]
   [ADD OBJECT Clause]
   [IMPLEMENTS Clause]
   [Function_Procedure_Definition_Clause]
ENDDEFINE

Для подробной информации и полного синтаксиса, см. DEFINE CLASS Команда . Для подробной информации о специфическом предложении DEFINE CLASS команда, см. следующие темы:

Примеры

Пример 1

Следующий пример создает класс по имени MyForm от базового класса Form и содержит процедуру для события Click . Форма, созданная от класса содержит метод Click , который выводит диалоговое окно, когда Вы щелкаете на форме.

Скопировать код
DEFINE CLASS MyForm AS Form
   PROCEDURE Click
      = MESSAGEBOX('MyForm has been clicked!')
   ENDPROC
ENDDEFINE

Пример 2

Следующий пример показывает, как Вы можете задать строгий контроль типов используя PROCEDURE cArrayName [] [AS Type ][@][AS Type ] предложение так, чтобы массивы могли быть правильно описаны как безопасные массивы к библиотеке типов:

Скопировать код
DEFINE CLASS mySession AS Session OLEPUBLIC
    PROCEDURE GetWidgets1(aWidgets[])
    ENDPROC
    PROCEDURE GetWidgets2(aWidgets[] AS Integer)
    ENDPROC
    PROCEDURE GetWidgets3(aWidgets[] AS Integer @)
    ENDPROC
    PROCEDURE GetRS(oRS[] AS ADODB.Recordset @)
    ENDPROC
ENDDEFINE

Как в других примерах, следующий код демонстрирует, как Вы можете определить строгую типизацию сложных выражений, определяя тип, основанный на COM классе:

Скопировать код
DEFINE CLASS mySession AS Session OLEPUBLIC
   REFERENCE "ADODB.Recordset"
   PROCEDURE GetRS() AS ADODB.Recordset
      x=CREATEOBJECT("ADODB.Recordset")
      RETURN X
   ENDPROC
   PROCEDURE SetRS(oRS AS ADODB.Recordset @)
      oRS=CREATEOBJECT("ADODB.Recordset")
   ENDPROC
ENDDEFINE

См. Также