Показать сообщение отдельно
Старый 21.01.2008, 07:50   #18  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от lemchey_white Посмотреть сообщение
Всем доброго времени суток, подскажите пожалуйста возможна ли передача функции в другую функцию в качестве параметра?
Цитата:
Сообщение от petr Посмотреть сообщение
Просто хотел показать, что конструкция
имеет право на существование, и без нее не реализовать некоторые вещи проблематично (я ухожу от кванвора всеобщности), а уж как она получит название метода (либо из константы, либо как параметр функции) - это не так уж и важно.
Вам не кажется, что в ходе обсуждения произошла подмена вопроса?

Во-первых, это пример не передачи "функции", а вызова совершенно конретной для разных классов.

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

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

В большинстве случаев не надо передавать методы.
В большинстве случаев надо создавать семейства классов (пример SysFileDeployer, axdBase, ImageListAppl, LedgerBalance и т.п.)

В стандартной ax4.0 sp2 имеется всего 128 случаев работы с методами напрямую.
многие из этих случаев являются антипаттернами (показывают как НЕ надо делать)

Код:
Class SysDictClass.hasObjectMethod
\Data Dictionary\Tables\AifPipelineComponent\Methods\description
\Classes\SysDictClass\hasObjectMethod
\Classes\AxInternalBase\setParmMethodAsNotMandatory
\Classes\AxdBase\setParmMethodAsMandatory
\Classes\BatchJournalRun\canClassGoBatchJournal
\Classes\SysBPCheckMemberFunction\checkUseOfCASProtectedAPIs
\Classes\SysLabelFind\controlName2Id
\Classes\SysTest\hasMethod
\Forms\AifPipelineComponent\Data Sources\AifPipelineComponent\Methods\active
\Forms\AifPipelineComponent\Methods\generateComponentLookupTable
\Forms\SysRecordTemplateTable\Methods\disableIfButton
\Forms\SysRecordTemplateTable\Methods\disableIfHasDataMethod

Class SysDictClass.hasStaticMethod
\Classes\RunBase\getDescription
\Classes\SysDictClass\hasStaticMethod
\Classes\RunBase\getHelpText
\Classes\SysBPCheckClassNode\checkConstructors
\Forms\SysClassWizard\Methods\frameworkSetDescription

class SysMethodInfo
\Classes\SysDictClass\hasObjectMethod
\Classes\Global\tableHasInstanceMethod
\Classes\Global\tableHasStaticMethod
\Classes\SysDictClass\hasStaticMethod
\Classes\RunBaseReport\initReportRun
\Classes\SysMethodInfo\path
\Classes\AxdBaseCreate\insertInPropertyInfoMap
\Classes\AxdBaseGenerateXSD\addClassProperties
\Classes\AxdBaseGenerateXSD\addDocumentProperties
\Classes\AxdBaseRead\buildMethodInfoMap
\Classes\WebLet\getDescription
\Classes\WebLet\getHelpText
\Classes\WebLet\inContext
\Classes\WebLet\isEnabled
\Classes\ProjListProjTransLayout\setNoOfDecimals
\Classes\SysApplicationObjectPathInfo\methodInfo
\Classes\xUtilElements\runMode
\Classes\SysBPCheckClassNode\checkAbstract
\Classes\SysBPCheckClassNode\checkConstructors
\Classes\SysBPCheckClassNode\verifyConstructMethod
\Classes\SysMethodInfo\getSource
\Classes\SysBPCheckFormEditControl\checkLabelUse
\Classes\SysBPCheckMemberFunction\check
\Classes\SysBPCheckMemberFunction\checkSource
\Classes\SysBPCheckMemberFunction\checkAccessSpecifier
\Classes\SysBPCheckMemberFunction\checkVariables
\Classes\SysMethodInfo\superMethodInfo
\Classes\SysMethodInfo\subMethodInfoList
\Classes\SysBPCheckMemberFunction\checkAOS
\Classes\SysMethodInfo\runMode
\Classes\SysBPCheckMemberFunction\initTmpxRefReferences
\Classes\SysBPCheckMemberFunction\classDeclaration
\Classes\SysBPCheckMemberFunction\checkHelpUse
\Classes\SysBPCheckMemberFunction\checkLabelUse
\Classes\SysBPCheckMemberFunction\checkUsed
\Classes\SysBPCheckMemberFunction\checkUsedMemberFunction
\Classes\SysBPCheckMemberFunction\checkUsedMemberFunctionServer
\Classes\SysBPCheckMemberFunction\pseuduUtilElements
\Classes\SysBPCheckMemberFunction\checkVariablesUse
\Classes\SysBPCheckMemberFunction\dispose
\Classes\SysBPCheckMemberFunction\init
\Classes\SysBPCheckReportControl\checkGeneral
\Classes\SysBPCheckReportControl\checkLabelUse
\Classes\SysFormBuildDataSource\getMethodInfo
\Classes\SysLabelFind\doFormEditControl
\Classes\SysMethodInfo\superMethodNode
\Classes\SysMethodInfo\toString
\Classes\SysSecurity\getFormDisplayMethods
\Classes\SysTreenodeWashClassNode\checkConstructors
\Classes\xUtilIdElements\runMode

Class DictMethod
\Classes\smmSalesManagementQueries\allowedMethods
\Classes\RunBase\checkCloseDialog
\Classes\AifServiceableMethodValidator\validateMethodSignature
\Classes\AifServiceableMethodValidator\hasMethod
\Classes\AifServiceableMethodValidator\hasPublicAccess
\Classes\AifServiceableMethodValidator\hasValidParameters
\Classes\AifServiceableMethodValidator\hasValidReturnType
\Classes\AifServiceableMethodValidator\validateReceiveDocument
\Classes\AifServiceableMethodValidator\validateReceiveDocumentList
\Classes\AifServiceableMethodValidator\validateSendDocument
\Classes\AifServiceableMethodValidator\validateSendDocumentList
\Classes\AifServiceableMethodValidator\validateQueryDocuments
\Classes\AifServiceableMethodValidator\validateQueryEntityKeys
\Classes\AifServiceableMethodValidator\validateProcessEntity
\Classes\AifServiceableMethodValidator\validateProcessEntityList
\Classes\AifWebMethodGenerator\getWebMethodParameterTypes
\Classes\EditorScripts\getApplicableScripts
\Classes\EditorScripts\showScripts
\Classes\LedgerGDPdUDataExport\findSMethodBaseType
\Classes\LedgerGDPdUDataExport\findSNumOfDecimals
\Classes\LedgerGDPdUDataExport\findMethodBaseType
\Classes\LedgerGDPdUDataExport\findNumOfDecimals
\Classes\LedgerGDPdUFieldWizard\fillMethodNameList
\Classes\SysDictClass\invokeObjectMethod
\Classes\SysApplCheck\checkTableFieldPnameMustBeUnique
\Classes\SysApplCheck\checkTreeNodeNameConflicts
\Classes\SysApplCheck\showTableMethodsRunOn
\Classes\SysAutoRun\execRun
\Classes\SysBPCheckClassNode\checkRunBaseImplementation
\Classes\SysBPCheckFormEditControl\checkReference
\Classes\SysBPCheckMemberFunction\checkDiscontinuation
\Classes\SysBPCheckTable\checkFieldPnameUniqueness
\Classes\SysClassWizard\createAbstractMethods
\Classes\SysCodeCoverage\postUpdate
\Classes\SysDictClass\isInheritedVariable
\Classes\SysExcelTemplateField\type
\Classes\SysExcelTemplateField\extendedTypeId
\Classes\SysExcelTemplateField\help
\Classes\SysExcelTemplateField\label
\Classes\SysHelpBookDocumentationDeveloper\genApplClassMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\genApplTableMethodHelp
\Classes\SysHelpBookDocumentationSystem\methodSyntax
\Classes\SysHelpBookDocumentationDeveloper\genParmMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\genConstructMethodHelp
\Classes\SysHelpBookDocumentationDeveloper\processLabels
\Classes\SysHelpBookDocumentationSystem\actualDictMethod
\Classes\SysHelpBookDocumentationSystem\genClassMethodHelp
\Classes\SysHelpBookDocumentationSystem\processLabels
\Classes\SysHelpClassMethodWebLet\designView
\Classes\SysMethodInfo\classDeclaration
\Classes\SysTestCase\testMethods
\Classes\SysUmlObjectModel\reverseEngineerClassProperties
\Classes\SysUmlObjectModel\reverseEngineerMethod
\Classes\SysUmlObjectModel\reverseEngineerParameters
\Classes\SysUmlObjectModel\reverseEngineerTableProperties
\Classes\WebReportGraph\makeTitle
__________________
полезное на axForum, github, vk, coub.