2016-12-27 33 views
0

我有一個名爲KeyRatioSymbol的基類。 我有一個繼承自KeyRatioSymbol的類,名爲GuruFocusKeyRatioSymbol。未找到繼承的成員

KeyRatioSymbol有這個更新方法:

 /// <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定義成員CurrencyId並希望重寫更新方法,以包括新CurrencyId更新時:

 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 
    } 

現在,編譯器會抱怨:「GuruFocusKeyRatioSymbol '不包含'CurrencyId'的定義...

爲什麼編譯器找不到CurrencyId mem eber在類GuruFocusKeyRatioSymbol?

問候!

+0

@AluanHaddad - 當然是;基類定義了「T」的泛型類型參數,而派生類將類型參數提供爲「GuruFocusKeyRatioSymbol」。 –

+3

從'this.CurrencyId = x.CurrencyId',其中是否定義了'x'? –

+0

如果我們能在這裏看到一個更完整的例子,那將會很棒。對於我們所知道的,你在某個地方的某個類名上做了一個拼寫錯誤,而「this」或「x」的類型不是你認爲的那種類型。 – David

回答

2

在您的Update方法中,您只需簡單地命名泛型參數GuruFocusKeyRatioSymbol,而您在父級中使用名稱T。命名泛型參數GuruFocusKeyRatioSymbol並不意味着它將是您的GuruFocusKeyRatioSymbol類型,您現在只有兩種不同的名稱。如果您指定通用約定的泛型方法參數T,它將具有相同的行爲,但這種類型的對象不一定具有CurrencyID;他們可以是任何類型的關鍵比例符號,而不僅僅是特定的一個。

+0

啊,謝謝。通過重寫該方法,我簡單地重新實現了它,並將泛型參數T(基類)重命名爲GuruFocusKeyRatioSymbol。 – user2145393