Estou tentando usar o operador ToString em uma classe TLPP.
O exemplo abaixo funciona:
#include 'tlpp-core.th'
#Include "rwmake.ch"
#Include "Protheus.ch"
#INCLUDE "TBICONN.CH"
namespace teste.testeToString
User Function testeToString()
Local oHash := tHashMap():New()
Local oTeste as Object
Local aLength := {}
Local nI
PREPARE ENVIRONMENT EMPRESA "T1" FILIAL "XIFIS26" MODULO "FIS"
For nI := 1 To 200
oTeste := OperadorToStr():New(cValToChar(nI))
oHash:Set(nI, oTeste)
oTeste := Nil
Next
oHash:List(aLength)
For nI := 1 To Len(aLength)
oHash:Get(nI, oTeste)
conout(oTeste)
oTeste := Nil
Next
Return
Class OperadorToStr
Data cTeste as Character
Public Operator ToString()
Public Method new() Constructor
EndClass
Method new(cTeste as Character) Class OperadorToStr
::cTeste := cTeste
Return Self
Operator ToString() Class OperadorToStr
Return "Imprime String " + ::cTeste
Class OperadorToStrExtendida From OperadorToStr
Public Method new(cTeste) Constructor
EndClass
Method new(cTeste) Class OperadorToStrExtendida
_Super:new(cTeste)
Return Self
No entanto, se eu altero o tipo do meu objeto para OperadorToStrExtendida, o operador deixa de funcionar. A classe que herda não deveria herdar o operador também? Outra dúvida: em quais funções eu posso usar o operador? Testando eu só consegui fazer funcionar no conout e no cValTochar, mas gostaria que funcionasse na FWWriteFile, por exemplo. É possível?
Agradeço desde já,
Allef, muito estranho esse comportamento, copiei seu código e tentei compilar e ele não reconhece essa sintaxe Operator, muito embora no TDN esteja devidamente documentada. Tem alguma alteração no funcionamento do protheus que não foi publicada.
— Cirilo Rocha 22 de Feb de 2023@Cirilo, na verdade é preciso adicionar #include 'tlpp-object.th', assim ele irá compilar, mas o comportamento que eu reportei persiste.
— Allef Souza 24 de Feb de 2023