2016-12-27 6 views
0

Ich habe eine Basisklasse namens KeyRatioSymbol. Ich habe eine Klasse geerbt von KeyRatioSymbol namens GuruFocusKeyRatioSymbol.Inherited member not found

KeyRatioSymbol hat dieses Update-Methode:

 /// <summary> 
    /// Updates an existing key ratio symbol by setting the values from the new <see cref="KeyRatioSymbol"/>. 
    /// </summary> 
    public virtual void Update<T>(T newKeyRatioSymbol) where T : KeyRatioSymbol 
    { 
     this.Identifier = newKeyRatioSymbol.Identifier; 
    } 

GuruFocusKeyRatioSymbol definiert Mitglied CurrencyID und will die Update-Methode außer Kraft setzen den neuen CurrencyID aufzunehmen, wenn die Aktualisierung:

 private int _CurrencyId; 
    /// <summary> 
    /// Gets or sets the CurrencyId 
    /// </summary> 
    public int CurrencyId { get { return this._CurrencyId; } set { this.SetProperty(ref this._CurrencyId, value); } } 


    public override void Update<GuruFocusKeyRatioSymbol>(GuruFocusKeyRatioSymbol newKeyRatioSymbol) 
    { 
     base.Update(newKeyRatioSymbol); 
     this.CurrencyId = x.CurrencyId; // Compiler error 
    } 

Jetzt ist der Compiler beschwert: ‚GuruFocusKeyRatioSymbol 'enthält keine Definition für' CurrencyId '...

Warum findet der Compiler den CurrencyId mem nicht eber in der Klasse GuruFocusKeyRatioSymbol?

Grüße!

+0

@AluanHaddad - sicher ist es; Die Basisklasse definiert das generische Typargument von "T", während die abgeleitete Klasse das Typargument als "GuruFocusKeyRatioSymbol" bereitstellt. –

+3

Von 'this.CurrencyId = x.CurrencyId', wo ist' x' definiert? –

+0

Wäre toll, wenn wir hier ein vollständigeres Beispiel sehen könnten. Soweit wir wissen, haben Sie irgendwo einen Klassennamen falsch notiert und der Typ für "this" oder "x" ist nicht das, was Sie denken. – David

Antwort

2

In Ihrer Update Methode haben Sie einfach das generische Argument GuruFocusKeyRatioSymbol benannt, während Sie den Namen T im übergeordneten Element verwendet haben. Die Benennung des generischen Arguments GuruFocusKeyRatioSymbol bedeutet nicht, dass es sich um Ihren Typ GuruFocusKeyRatioSymbol handelt. Sie haben gerade zwei verschiedene Typen mit demselben Namen. Wenn Sie das generische Methodenargument T benennen, was die übliche Konvention ist, wird es das gleiche Verhalten haben, aber es wird offensichtlich, warum Objekte dieses Typs nicht notwendigerweise eine CurrencyID; Sie könnten jede Art von Schlüsselverhältnissymbol sein, nicht nur dieses spezifische.

+0

Ah, danke. Durch Überschreiben der Methode habe ich sie einfach neu implementiert und das generische Argument T (Basisklasse) in GuruFocusKeyRatioSymbol umbenannt. – user2145393