2016-12-27 8 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を見つけられませんGuruFocusKeyRatioSymbolクラスのeber?

よろしくお願いいたします。

+0

@AluanHaddad - 確かです。基底クラスはジェネリック型引数 'T'を定義し、派生クラスは型引数を' GuruFocusKeyRatioSymbol'として提供します。 –

+3

'this.CurrencyId = x.CurrencyId'から' x'はどこに定義されていますか? –

+0

ここでもっと完全な例を見ることができれば素晴らしいだろう。どこかでクラス名にタイプミスがあり、 'this'や' x'のタイプがあなたの考えではないことがわかっているからです。 – David

答えて

2

Updateメソッドでは、親にTという名前を使用したのに対し、汎用の引数はGuruFocusKeyRatioSymbolとしました。総称引数GuruFocusKeyRatioSymbolの名前は、それがあなたのGuruFocusKeyRatioSymbol型になることを意味するわけではありません。同じ名前の2つの異なる型があります。一般的な規約である汎用メソッドの引数Tに名前を付けると、同じ動作になりますが、そのオブジェクトのオブジェクトが必ずしもCurrencyIDを持たない理由は明らかです。特定のものだけでなく、どのようなタイプのキーレシオのシンボルでもかまいません。

+0

ああ、ありがとう。このメソッドをオーバーライドすることによって、単純に実装し直して、汎用引数T(基本クラス)をGuruFocusKeyRatioSymbolに変更しました。 – user2145393

関連する問題