Operadores do TLPP não funcionam em relação de herança

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á,

compartilhar
  • 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
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do TOTVS DevForum!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags tlpp operator tostring ou faça a sua própria pergunta.