Again, what's in a name? (R)
"But it's written in the starlight
And every line on your palm
We're fools to make war
On our brothers in arms"
("Brothers in Arms", Dire Straits, 1985)
Este post contiene la respuesta a la pregunta del post anterior.
Efectivamente, la respuesta a la pregunta tiene que ver con la interoperabilidad entre lenguajes .NET. El atributo IndexerName que hemos asociado a nuestro indexador de la clase Friend facilita la utilización de aquél desde ensamblados creados con otros lenguajes de la familia .NET en los cuales el acceso a los indexadores se lleve a cabo a través de propiedades comunes y corrientes. Sin la presencia de este atributo, el indexador que hemos añadido a nuestra colección personalizada sería en esos lenguajes prácticamente inaccesible (al menos de manera directa: mediante reflexión, por supuesto, se podría acceder a él; pero no sería, por ejemplo, descubrible mediante Intellisense). Y no es cosa de "hacerle la puñeta" a nuestros "hermanos de armas" que programan otros lenguajes...
Debemos aclarar que cuando decimos "otros lenguajes" *no* estamos incluyendo a Visual Basic, desde el que se podrá acceder al indexador tanto mediante el nombre que hemos definido (Names) como omitiéndolo, ya que esta propiedad se convertirá en la propiedad por defecto en lugar de Item. Curiosamente, si se omite el atributo IndexerName (o se le asocia el valor "Item"), nuestro indexador se verá desde VB como una sobrecarga de la propiedad vectorial por defecto Item.
A continuación se muestra un ejemplo de programa en VB que hace uso del indexador en cuestión:
Imports Demo.Friends
Module Module1
Sub Main()
Dim TheList As New FriendsList()
TheList.Add(New [Friend]("pepe", #1/1/1980#))
Console.WriteLine(TheList("pepe").Name) ' Names es ahora la propiedad por defecto
Console.ReadLine()
End Sub
End Module
Por cierto, ¿sabe por qué el nombre de la clase Friend está entre corchetes en el ejemplo? Pues claro que sí: Friend es una palabra reservada en VB, y con los corchetes le indicamos al compilador que reconozca ese lexema como un identificador cualquiera y no como una palabra reservada. Todo lenguaje .NET que se precie debe ofrecer algún mecanismo similar; pero de eso ya hemos hablado aquí antes.
Pop/Rock tip: Dire Straits ha sido uno de los grupos británicos de más éxito de las últimas décadas, desde que en 1978 tomara por asalto las emisoras de radio de medio mundo con su conocido tema "Sultans of Swing" (yo estaba allí :-). Personalmente, me quedo con sus cuatro primeros discos: "Dire Straits" (1978), "Communiqué" (1979), "Making movies" (1980) y "Love over Gold" (1982), que dieron lugar a temas inolvidables como el ya mencionado "Sultans of Swing", "Down to the Waterline", "Once upon a Time in the West", "Telegraph Road". "Tunnel of Love" o "Romeo and Juliet" (la conexión entre este post y el anterior :-). "Brothers in Arms" es precisamente el tema que dio título al quinto álbum de la banda, con el que comenzó una etapa más comercial.
Después de la disolución de la banda, su guitarrista, Mark Knopfler (uno de los poquísimos guitarristas de rock que, gracias a su estilo personalísimo, se reconocen a los pocos compases de comenzar a tocar), ha continuado publicando discos y dando giras. En particular, ha estado varias veces en España, país al que menciona en su obra:
"Oh girl it looks so pretty to me / Like it always did
Like that Spanish city The Spanish City to me / When we were kids"
("Tunnel of Love", Dire Straits, 1980)