Again, what’s in a name?

“What’s in a name? That which we call a rose
By any other name would smell as sweet”
(“Romeo and Juliet”, William Shakespeare, c. 1595)

“A title, unfortunately, is in itself a key to interpretation”
(Postcript to “The Name of the Rose”, Umberto Eco, 1980)

Vuelvo a la carga después de un tiempo de silencio con otro truco sencillo, pero que espero enseñe algo a algunos, no porque sea nada complicado, sino porque tal vez nunca antes lo hayan necesitado. La idea se me ocurrió mientras programaba, sin dudas bajo el influjo de los libros que estoy releyendo últimamente (en inglés), que de un modo u otro tocan el tema de los nombres y su significado.

A continuación se muestra una clase que implementa una lista de amigos (pudo ser una lista de cualquier cosa). La pregunta es: ¿Qué significa el atributo IndexerName aplicado al indexador que hemos definido? ¿Para qué sirve?

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.CompilerServices;

namespace Demo.Friends
{
    public class FriendsList : List<Friend>
    {
        public new void Add(Friend f)
        {
            if (FindByName(f.Name) != null)
                throw new ArgumentException(“Name already in list”);
            base.Add(f);
        }

        [IndexerName(“Names”)]
        public Friend this[string name]
        {
            get
            {
                return FindByName(name);
            }
        }

        private Friend FindByName(string name)
        {
            Debug.Assert(!string.IsNullOrEmpty(name));
            return this.Find(f => f.Name == name.ToUpper());
        }
    }

    public class Friend
    {
        public string Name { get; private set; }
        public DateTime? BirthDate { get; set; }

        private Friend() { }
        public Friend(string name, DateTime? birthDate)
        {
            Debug.Assert(!string.IsNullOrEmpty(name));
            Name = name.ToUpper();
            BirthDate = birthDate;
        }
    }
}

(Jun. 23) Vea la respuesta aquí.


Literary tip: William Shakespeare (1564-1616) no necesita presentación: es sin duda alguna uno de los mayores genios que haya dado la literatura universal. Seguramente un poco menos conocido sea Umberto Eco, semiólogo, filósofo y crítico literario italiano que un buen día decidió, para suerte nuestra, escribir su propia novela: la inolvidable “El nombre de la rosa“, uno de mis libros favoritos. Aunque ya había leído la novela, no conocí de la existencia de las “Apostillas” (comentarios del propio autor sobre el libro y el proceso de su creación) hasta que mi buen amigo José Ramón me prestó una edición que las incluía. JR hoy vive y trabaja en Punta Arenas, Chile (si no sabe dónde está eso, amigo lector, búsquelo en un mapa). Casos como el suyo o el de otro buen amigo, más cubano que las palmas pero con pasaporte de Liechtenstein, me hacen preguntarme a veces si quedará algún punto del planeta en el que no haya un compatriota.

Octavio Hernandez

Desarrollador y consultor en tecnologías .NET. Microsoft C# MVP entre 2004 y 2010.

Un comentario en “Again, what’s in a name?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *