137 votes

Indexeurs statiques ?

Pourquoi les indexeurs statiques sont rejetées en c# ? Je ne vois pas pourquoi ils ne devraient pas être autorisés et en outre, ils pourraient être très utiles.

Par exemple :

Le code ci-dessus bénéficierait grandement d’un indexeur statique. Cependant, il ne sera pas compiler parce que les indexeurs statiques ne sont pas autorisés. Pourquoi est-ce donc ?

104voto

Jon Skeet Points 692016

Selon moi, qu'il a été jugé ne pas d’être terriblement utile. Je pense que c’est une honte aussi un exemple que j’ai tendance à utiliser est Encoding, où Encoding.GetEncoding("foo") peut être Encoding [« Foo »]. Je ne pense pas que ça serait revenir très souvent, mais en dehors de toute autre chose il se sent juste un peu incohérent ne pas d’être disponible.

J’aurais à vérifier, mais je soupçonne que c’est disponible à Illinois déjà.

81voto

Juliet Points 40758

Notation d’indexeur requiert une référence à . Étant donné que les méthodes statiques n’est une référence à une instance particulière de la classe, vous ne pouvez pas utiliser avec eux, et par conséquent vous ne pouvez utiliser la notation d’indexeur sur des méthodes statiques.

La solution à votre problème est l’utilisation du modèle singleton comme suit :

Maintenant, vous pouvez appeler `` à l’aide de la notation d’indexeur.

9voto

ChrisW Points 37322

Comme une solution de contournement, vous pouvez définir un indexeur de l’instance sur un objet singleton/statique (disons que ConfigurationManager est un singleton, au lieu d’être une classe statique) :

8voto

George Chakhidze Points 1386

Encore une autre solution :

Utilisation :

-2voto

lamorach Points 1

Le mot-clé this fait référence à l'instance courante de la classe. Fonctions membres statiques n'ont pas de ce pointeur. Le mot-clé this peut être utilisé pour l'accès des membres à partir de constructeurs, les méthodes d'instance, d'instance et des accesseurs.(extrait de msdn). Depuis il fait référence à une instance de la classe il est en conflit avec la nature de la statique, depuis statique n'est pas associé à une instance de la classe.

Une solution de contournement serait le suivant qui vous permet d'utiliser l'indexeur à l'encontre d'un privé Dictionnaire si vous avez seulement besoin de créer une nouvelle instance et que l'accès à la partie statique.

    public class ConfigurationManager 
{
    public ConfigurationManager()
    {
        // TODO: Complete member initialization
    }
    public object this[string keyName]
    {
        get
        {
                return ConfigurationManagerItems[keyName];
        }
        set
        {
                ConfigurationManagerItems[keyName] = value;
        }
    }
    private static Dictionary<string, object> ConfigurationManagerItems = new Dictionary<string, object>();        
}

Cela vous permet de passer l'ensemble de l'accès à un membre de la classe et il suffit de créer une instance de celle-ci et l'index.

    new ConfigurationManager()["ItemName"]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X