2009-05-23 26 views
6

Soy un desarrollador de C# trabajando en un proyecto VB.NET, y VS sigue tratando de conseguir que yo utilizo el: = thingie cuando llamo a una función con un parámetro ByRef así:¿Cuál es el uso de la sintaxis = =?

While reader.Read() 
HydrateBookFromReader(reader:=???) 

la HydrateBookFromReader función tiene la siguiente firma:

Public Function HydrateBookFromReader(ByRef reader As SqlDataReader) As Book 

¿por qué sigue insistiendo intelisense que utilizo que: = construcción, y para qué sirve?

Respuesta

10

En VB, el: = se utiliza al especificar parámetros con nombre.

Contact(Address:="2020 Palm Ave", Name:="Peter Evans") 

Esto es especialmente útil para especificar parámetros opcionales.

+0

¡Exactamente la respuesta que estaba buscando! Gracias. Las otras respuestas también fueron muy útiles e informativas, pero se centran en otros aspectos de la pregunta –

+0

yw. Un poco difícil para los signos de puntuación de Google. Cuando agreguen esto a C# en la próxima versión, solo serán dos puntos sin el signo igual. Solo para mantenernos alerta cuando cambiamos de idioma. – DOK

+1

Solo agregaría que esto es especialmente útil cuando se trata de un método con muchos parámetros opcionales. Esto se ve más cuando se llaman a las API de Office: hay algunas API que tienen 15 parámetros opcionales y es mucho más conveniente especificar los parámetros por nombre en lugar de omitir todos los argumentos posicionales. (Esta es la razón por la cual C# está agregando la característica.) – panopticoncentral

4

¿Por qué intellisense sigue insistiendo en que utilizo eso: = construcción, y para qué sirve?

Es importante señalar que IntelliSense no insisten, se propone . Usarlo en su caso no tendría sentido ... esta característica se usa principalmente para listas de parámetros muy largas con muchos parámetros opcionales, de los cuales solo desea pasar, por ejemplo, el último. Es útil cuando se trabaja con Microsoft Office Interop.

También (ya que lo menciona en sus etiquetas): esto no tiene nada que ver con ByRef. ByRef es equivalente a ref y out en C#, es decir, permite que el método manipule el parámetro en sí.

+0

Muy perspicaz, la clave aquí fue que intellisense está ahí para sugerir cosas, pero aún conserva el control. –

+0

puntos buenos - Intellisense insistía en proponerlo todo el tiempo, causándome una gran molestia, especialmente ahora sabiendo para qué sirve, y sabiendo que no tiene sentido cuando se aplica a un método de parámetro único –

+0

La razón por la que mencioné ByRef en las etiquetas es que no veo la sugerencia intellisense cuando hago el mismo tipado contra un parámetro ByVal, así que pensé que tenía algo que ver con ByRef –

1

Intellisense puede sugerir la sintaxis = =, pero sospecho que se compilará sin ella.

HydrateBookFromReader(myReader); 

En futuras versiones de C# donde se permiten los parámetros opcionales, los parámetros con nombre se le permiten especificar algunos parámetros pero no a otros, y para especificar parámetros en un orden diferente de lo que fueron declarados. Los parámetros nombrados también le permitirán aclarar opcionalmente el propósito del parámetro que se transfiere, haciendo que el código sea más legible en algunos casos.

Los parámetros con nombre serán especialmente importantes en C# 4.0 para COM Interop, donde se pueden eliminar muchos parámetros superfluos.

Anders Hejlsberg tiene una excelente discusión sobre el futuro de C# en el Canal 9 al http://channel9.msdn.com/pdc2008/TL16/. Su discusión sobre los parámetros nombrados es a los 40 minutos y 45 segundos de la charla.

+0

+1 para el buen vínculo con C# 4.0, sin embargo no lo hace Totalmente abordan la pregunta original. –

Cuestiones relacionadas