SETGET Como funciona em uma classe
Enviado: 09 Fev 2021 22:09
Alguém que entende de criação de classe, poderia me explicar como funciona o SETGET com algum exemplo?
Código: Selecionar todos
#include "hbclass.ch"
PROCEDURE Main
LOCAL xTela := c():New()
SetMode( 20, 80 )
xTela:nRow := 10
@ Row(), Col() SAY "teste"
xTela:nRow := 12
@ Row(), Col() SAY "outro"
Inkey(0)
RETURN
CLASS c
METHOD nRow( xValue ) SETGET
END CLASS
METHOD nRow( xValue ) Class c
IF xValue != NIL
@ xValue, 0 SAY ""
ENDIF
RETURN Row()
Código: Selecionar todos
{ |x| if( x != NIL, y := x, y ) }Não, assim você estaria colocando valores nas variáveis publicas da classe.asimoes escreveu:Desculpa a minha falta de informação, o uso do SETGET seria isso:
::metodo():variavel := "teste" //para SET
teste := ::metodo() //para GET
?
Código: Selecionar todos
CREATE CLASS CADASTROSCLASS
METHOD New( ParamServer ) INLINE ::oServer := ParamServer, Self
METHOD CADASTROS_MANUTENCAO( )
METHOD CADASTROS_PESQUISA_FORNECEDORES( )
METHOD CADASTROS_PESQUISA_CLIENTES( )
METHOD CADASTROS_PESQUISA_CLIENTES_REMOTO( cFilial )
METHOD CADASTROS_PESQUISA_FUNCIONARIOS( )
PROTECTED:
VAR oServer
VAR cReportOption
VAR cDefaultPrinter
VAR nPrinterType
VAR TIPCLI INIT 1
VAR NRAZ_SOC
VAR CPFANT
VAR CPFCGC
VAR INSEST
VAR INSMUN
VAR ISENTO
VAR SUFRAMA
VAR EMAIL
VAR ENDER
VAR NUMERO
VAR COMPLEM
VAR BAIR
VAR CEP
VAR PAIS INIT "BRASIL"
VAR UF INIT "AC"
VAR CIDADE INIT "RIO BRANCO"
VAR FONE
VAR CONTATO
VAR DATCAD INIT CTOD("00-00-0000")
VAR DATALT INIT CTOD("00-00-0000")
VAR LIMCRE INIT 0.00
VAR TOTCRE INIT 0.00
VAR VENBLO INIT 1
VAR FL_CLIENTE INIT .F.
VAR FL_FORNECEDOR INIT .F.
VAR FL_FUNCIONARIO INIT .F.
VAR FL_EXFUNCIONARIO INIT .F.
VAR cRichedit1 INIT .F.
METHOD CADASTROS_CONSULTA_VALES_FUNCIONARIOS_CARREGA( PERINI, PERFIN, FORNECEDOR_ID, nTotalVales )
METHOD CADASTROS_CONSULTA_VALES_FUNCIONARIOS_onDlgInit( oDlg, nTotalVales )
METHOD CADASTROS_CONSULTA_VALES_FUNCIONARIOS( FORNECEDOR_ID, NRAZ_SOC )Código: Selecionar todos
METHOD getName()
return ::Name
METHOD setName(cName)
::Name := cName;
METHOD setgetName(cName)
if pcount() == 1
::Name := cName
endif
return ::Name
METHOD Max(nMaxCounter)
if pcount() == 1
::MaxCounter := nMaxCounter
endif
return ::MaxCounter
Código: Selecionar todos
CREATE CLASS TConfig
//Ate mesmo as variaveis podem ser controladas a nivel de visibilidade/alteração/Nivel
DATA Chave INIT ""
DATA PATH INIT ""
DATA Usuario INIT "" ReadOnly EXPORTED //Guarda o nome do usuario
DATA Usu INIT "" ReadOnly EXPORTED //Guarda o codigo do usuario criptografado
....
//Get cTitle := ::Title //o interessante é que voce pode ate mesmo omitir o Set
ACCESS Title INLINE if( TestaVar( '_'+::Name ),GetwindowText( GetFormHandle( ::Name ) ),"" )
//Set ::Title := cTitle
ASSIGN Title( c ) INLINE if( TestaVar( '_'+::Name ),SetwindowText( GetFormHandle( ::Name ), c ),"" )
DATA cor INIT { 212, 208, 200 }
METHOD New()
METHOD Password()
ENDCLASS
// ***************************************************************************
// //////////////////////////////////////////////////////////////////////////
// ***************************************************************************
Na verdade a proposta do SETGET ou "settergetter" em todas as linguagens é ler e escrever dados encapsulados.JoséQuintas escreveu:Usa nRow como variável, mas ela faz mais que uma simples variável.Código: Selecionar todos
#include "hbclass.ch" PROCEDURE Main LOCAL xTela := c():New() SetMode( 20, 80 ) xTela:nRow := 10 @ Row(), Col() SAY "teste" xTela:nRow := 12 @ Row(), Col() SAY "outro" Inkey(0) RETURN CLASS c METHOD nRow( xValue ) SETGET END CLASS METHOD nRow( xValue ) Class c IF xValue != NIL @ xValue, 0 SAY "" ENDIF RETURN Row()
De repente, pra controles, oControl:BackColor := 127646
E o método BackColor trocaria a cor de fundo do controle.
Código: Selecionar todos
#include "hbclass.ch"
function main()
LOCAL xTela := c():New()
//SetMode(20, 80)
Scroll()
SetPos( 0, 0 )
@ xTela:Getrow, Col() SAY "1st teste" // row foi definido em 10 default na criação da classe
xTela:setRow(11) // ou xTela:setgetRow(10)
@ xTela:Getrow, Col() SAY "2nd teste"
xTela:setRow(12) // ou xTela:setgetRow(12)
@ xTela:getRow, Col() SAY "3th teste"
inkey(0)
// linha abaixo somente para mostrar o erro ao acessar variável privada/hidden
@ xTela:Row, Col() SAY "outro" // Error BASE/41 Scope violation (hidden): C:ROW
return nil
CLASS c
HIDDEN:
VAR row INIT 10
EXPORTED:
METHOD setgetRow(xValue) SETGET
METHOD setRow(xValue) SETGET
METHOD getRow() SETGET
END CLASS
METHOD setgetRow(xValue) Class c
IF xValue != NIL
::row := xValue
ENDIF
return ::row
METHOD setRow(xValue) Class c
IF xValue != NIL
::row := xValue
ENDIF
METHOD getRow(xValue) Class c
return ::row