[SOLUCIONADO] Pequeña duda sobre argumentos

Iniciado por Eleкtro, 13 Enero 2013, 18:10 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro

¿Se puede definir más de un tipo por Valor/Referencia por argumento?

Necesito hacer algo así:
Public Function blablabla(ByRef Image_File As String or As Bitmap)

O en su defecto:
Public Function blablabla(ByRef Image_File As "Cualquier tipo que séa aceptable")
If Image_File = Ctype(string) then...
if Image_File = Ctype(Bitmap) then...








Novlucker

#1
Todos los tipos de objetos deberían de implementar la misma interfaz o heredar de la misma base (nada de lo que pones como ejemplo), de lo contrario, para eso se utilizan las sobrecargas :P

Podrías pasar un object, pero no es para nada recomendable, donde vea que comienzas a hacer eso te baneo :xD, en un rato me paso por tu post de snippets para darte unas sugerencias en cuanto a estructura de código :)

Saludos


Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

#2
Cita de: Novlucker en 13 Enero 2013, 18:15 PM
Podrías pasar un object, pero no es para nada recomendable, donde vea que comienzas a hacer eso te baneo :xD)

Pero digo yo que no seré el primero en tener este problemilla xD... ¿Como lo solucionarías tú?  :-[

Que pocas soluciones hay entonces.

PD: gracias!

EDITO:
Citaren un rato me paso por tu post de snippets para darte unas sugerencias en cuanto a estructura de código :)
perfecto!








Novlucker

Otra alternativa es utilizar generics, pero tampoco aplica para el caso, si vas a utilizar generics no deberías de estar verificando el tipo luego.

Cita de: EleKtro H@cker en 13 Enero 2013, 18:20 PM
Pero digo yo que no seré el primero en tener este problemilla xD... ¿Como lo solucionarías tú? :-[

Con sobrecargas, tendría dos métodos :P

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

#4
Cita de: Novlucker en 13 Enero 2013, 19:20 PMCon sobrecargas, tendría dos métodos :P

¿Me puedes indicar el nombre del término en inglés para buscar información?

Me dices sobrecarga y me quedo igual, no consigo asociarlo a nada... sobrecargar un sub/función, ¿eso que leches es? xD.








Novlucker

Overload

Sobrecargar métodos es tener un método que se llame igual, pero que acepte diferentes parámetros.
Código (vbnet) [Seleccionar]
Function GetWord() As String
Function GetWord(ByVal Position As Integer) As String
Function GetWord(ByVal Search As String) As String

http://msdn.microsoft.com/en-us/library/ms973896.aspx

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro

Gracias.

Y el própio intérprete sabe que función debe usar según el tipo de valor con el que lo llames independientemente del nombre, QUE BUENO!

Pero yo (que soy muy retorcido y me gusta experimentar situaciones xD), he intentado exprimir el ejemplo de esta manera para ver que pasaba:

Código (vbnet) [Seleccionar]
   Function Test(ByVal arg1 As Integer, _
   Optional arg2 As Integer = Nothing)
       MsgBox("A" & arg1)
   End Function


   Function Test(ByVal arg1 As Integer, _
   Optional arg2 As String = Nothing)
       MsgBox("B" & arg1)
   End Function

   Test(3)


Y no funciona,

¿Si el único parámetro de entrada que cambia es opcional, se puede sobrecargar de alguna manera?








Novlucker

¿Creas 3 sobrecargas? :P
Código (vbnet) [Seleccionar]
Function Test(ByVal arg1 As Integer)

Function Test(ByVal arg1 As Integer, _
    arg2 As Integer)

Function Test(ByVal arg1 As Integer, _
    arg2 As String)


Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

Eleкtro









$Edu$

Buscate en google las reglas de overloads, ya que en el caso ese que dejaste por ejemplo, que solo se diferencia con un argumento opcional, no se puede, y asi con otras cosas tampoco, por eso te podrias mirar algo para tenerlo en cuenta.

Aprendes rapido Elektro! saludos!