2009-07-21 6 views
1

Ich habe die Methode here auf fast alle Bereiche, wo ich overridable Methoden hatte und verwaltet, um sie zu beheben, aber es gibt einen Teil, wo die Methode funktioniert nicht in der gleichen Weise auf a unterschiedlichen Kontext versehenen Stück Code:Overridable Methoden in Konstruktoren mit 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; } 

Wo wieder die> ist der Code, der den Fehler verursacht, ich erhalte jedoch eine intellisense Option auf „auto-Eigenschaft Convert“, die einfach den Code zurückkehrt, wenn es gestartet wurde und das Problem nicht beheben. Wer weiß, welche Änderungen an diesem Teil vorgenommen werden müssen, um die fxcop-Verletzung zu beseitigen?

+0

Haben Sie ein privates Mitglied von IList , dass die Eigenschaft basiert? Wenn ja, könnten Sie direkt darauf zugreifen. –

+0

Ich habe ein privates Mitglied "private IList _territories;" und die entsprechende Änderung an der virtuellen Methode "get {return _territories;} set {_territories = value;}" jedoch erhalte ich immer noch die Verletzung. – markdigi

Antwort

0

Der Fehler tritt auf, weil Ihr privater Konstruktor eine Methode aufruft, die von einer abgeleiteten Klasse überschrieben werden kann. Um die Warnung zu beheben, müssen Sie alle Aufrufe an virtuelle Methoden aus dem Konstruktor entfernen.

In dem Beispiel, das Sie auflisten, verwendet InitMembers 'this.Territories', was die Verletzung verursacht. Entsprechend deinem späteren Kommentar hast du ein privates Mitglied hinzugefügt - benutze das stattdessen.