https://foro.gambas-es.org/viewtopic.php?f=4&t=8035
-----------------------------------
tincho
Viernes, 08 May 2020, 14:15

Dos Clases Que Se Llaman Igual
-----------------------------------
Hola a todos.
Este tema va de aclarar el funcionamiento de gambas a la hora de extender una clase.
Si tomamos por ejemplo la clase nativa String
 [img]https://foro.gambas-es.org/files/images/2590/captura_de_pantalla_2020_05_08_14_58_35.png[/img] 
Vemos que existen una serie de métodos.
Luego si se desea crear una clase String extendida dentro de un proyecto Gambas basta con colocar [b]Inherits String[/b] al comienzo de la clase que tendrá los métodos "nuevos"
[code linenumbers=false syntax=gambas]
' Gambas class file
'' This class extends the standard String class in gambas
Export
Create Static
Inherits String
'' This function counts how much times some string apear in other
Public Function Count(sWhere As String, sWhich As String) As Integer
  Dim i As Integer = 1
  Dim Cursor As Integer
  Dim Counter As Integer
  Repeat
    Cursor = InStr(sWhere, sWhich, i)
    If Cursor > 0 Then
      Inc Counter
      i = Cursor + String.Len(sWhich)
    Endif
  Until InStr(sWhere, sWhich, i) = 0 Or i > String.Len(sWhere)
  Return Counter
End
[/code]
Hasta aquí todo fenómeno, pero....
Que es lo que sucede si activamos el componente [b]gb.util[/b].
 [img]https://foro.gambas-es.org/files/images/2590/captura_de_pantalla_2020_05_08_14_58_12.png[/img] 
Este componente tiene una clase llamada [b]String[/b] pero en su interior no existe la palabra clave [b]Inherits[/b] sin embargo extiende la clase original [b]String[/b] de [b]gb[/b]
¿Como lo hace?
Es mas ahora en el ejemplo anterior de extensión de clase aparecen los métodos extendidos por gb.util.
¿Como funciona esto?
Saludos.


-----------------------------------
jsbsan
Sabado, 09 May 2020, 10:09

Re: Dos Clases Que Se Llaman Igual
-----------------------------------
Tincho:

Quizas mirando el codigo fuente de gambas, se puede ver como lo hace:

https://gitlab.com/tboege/gambas/-/tree/stable/comp/src/gb.util

https://gitlab.com/tboege/gambas/-/blob/master/comp/src/gb.util/.src/String.class


-----------------------------------
tincho
Sabado, 09 May 2020, 12:20

Re: Dos Clases Que Se Llaman Igual
-----------------------------------
[quote user="jsbsan" post="48414"]Tincho:
Quizás mirando el código fuente de gambas, se puede ver como lo hace:
https://gitlab.com/tboege/gambas/-/tree/stable/comp/src/gb.util
https://gitlab.com/tboege/gambas/-/blob/master/comp/src/gb.util/.src/String.class[/quote]
Gracias por el enlace Julio, pero es lo que hice exactamente, ver el código de gb.util el método String, y como en dicho código no existía la palabra clave [b]Inherits[/b] surgió este hilo.
Además hay otro tema, si intento extender la clase String nativa con una clase en mi proyecto que herede esta. Mi clase no se puede llamar Strings, el ide me dice que tengo que poner otro nombre String2 por ejemplo.
Así que si ya existe la clase nativa Strings, como es que hace gb.util para heredarla y crear otra Strings?
Saludos.


-----------------------------------
jguardon
Sabado, 09 May 2020, 15:22

Re: Dos Clases Que Se Llaman Igual
-----------------------------------
Benoit utiliza el término "reimplementación", pero desconozco su mecánica. Puede que en el código fuente existan mecanismos para ocultar clases con el mismo nombre cuando se carga un componente que contiene esa clase reimplementada. Buena pregunta.

Saludos


-----------------------------------
tincho
Sabado, 09 May 2020, 16:05

Re: Dos Clases Que Se Llaman Igual
-----------------------------------
[quote user="jguardon" post="48421"]Benoit utiliza el término "reimplementación", pero desconozco su mecánica. Puede que en el código fuente existan mecanismos para ocultar clases con el mismo nombre cuando se carga un componente que contiene esa clase reimplementada. Buena pregunta.
Saludos[/quote]
Este tema surgió porque tengo intenciones de extender algunas clases, String es la primera, y me gustaría hacerlo de manera que luego estas ampliaciones pueden incorporarse a las nuevas versiones, si la "cúpula" de desarrollo de gambas lo adopta claro.
Voy a plantearlo en [i]bugtracker[/i] a ver que me cuentan.
Saludos.


