2016-12-27 60 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