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

Смежные вопросы