2009-07-21 8 views
1

J'ai effectué la méthode here sur presque toutes les zones où j'ai eu des méthodes substituables et réussi à les réparer mais il y a une partie où la méthode ne fonctionne pas de la même manière sur un morceau différent contexted de code:méthodes Overridable dans les constructeurs avec InitMembers()

public Employee() 
    { 
     this.InitMembers(); 
    } 

    private void InitMembers() 
    { 
     // Init the collection so it's never null 
     this.Territories = new List<Territory>(); 
    } 
    public Employee(string firstName, string lastName): this() 
    { 
     this.reffirstName = firstName; 
     this.reflastName = lastName; 
    } 
> public virtual IList<Territory> Territories { get; protected set; } 

où à nouveau le> est le code provoquant l'erreur, je ne reçois cependant une option IntelliSense « Convertir en propriété auto », qui reprend simplement le code quand il a été lancé et ne pas réparer le problème. Quelqu'un sait quelles modifications doivent être apportées à cette partie pour éliminer la violation fxcop?

+0

Avez-vous un membre privé de IList que la propriété est basée? Si oui, vous pouvez y accéder directement. –

+0

J'ai ajouté un membre privé "private IList _territories;" et le changement approprié à la méthode virtuelle "get {return _territories;} set {_territories = value;}" mais je reçois toujours la violation. – markdigi

Répondre

0

L'erreur s'affiche car votre constructeur privé appelle une méthode qui peut être surchargée par une classe dérivée. Pour corriger l'avertissement, vous devez supprimer tous les appels aux méthodes virtuelles depuis le constructeur.

Dans l'exemple que vous dressez, InitMembers utilise 'this.Territories', ce qui provoque la violation. Selon votre dernier commentaire, vous avez ajouté un membre privé - utilisez-le à la place.

Questions connexes