2017-04-25 42 views
0
public abstract class InstallationStepLibrary 
{ 
    private Dictionary<string, InstallationStep> DictSteps; 

    protected InstallationStepLibrary() 
    { 
     DictSteps = new Dictionary<string, InstallationStep>(); 
    } 

    public InstallationStep this[string s] 
    { 
     get 
     { 
      return DictSteps[s]; 
     } 
     set 
     { 
      DictSteps[s] = value; 
     } 
    } 

    protected void NewStep(string name, InstallationStep step) 
    { 
     this[name] = step; 
    } 
} 

Je soupçonne que la première utilisation de « ce » est chaînage des constructeurs de la définition de InstallationStep, mais je ne peux pas comprendre comment le second « ce [nom] » (qui IntelliSense me dit Scopes à la classe InstallationStepLibrary, qui a du sens ...) peut être une syntaxe valide mais elle l'est.Quel est le but de la seconde [] dans cet exemple?

Il serait logique si elle scope au dictionnaire ...

+1

Ceci est un indexeur: 'InstallationStep publique cette [chaîne s]' et 'ce [nom] = étape; 'utilise l'indexeur. –

+0

Le dictionnaire a un modificateur privé, l'indexeur 'this [string s]' lui donne accès. – Ryan

Répondre

1

Le deuxième [] ou:

protected void NewStep(string name, InstallationStep step) 
{ 
    this[name] = step; 
} 

qu'appeler l'indexeur défini dans la classe. Il fonctionne même si l'appelant a juste utilisé:

installationStepLibrary[name] = step; 

Lorsque l'indexeur défini dans la classe est:

public InstallationStep this[string s] 
{ 
    get 
    { 
     return DictSteps[s]; 
    } 
    set 
    { 
     DictSteps[s] = value; 
    } 
}