2013-08-14 5 views
-3

Я получаю предупреждение в своей программе, то есть 'Employee.Salaried.CalculatePay()' скрывает унаследованный член 'Employee.Employee.CalculatePay()'. Используйте новое ключевое слово, если было предназначено скрытие. для этогоC# ООП наследования и полиморфизма

public double CalculatePay() 
    { 
     return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary)/52; 
    } 

Кто-нибудь есть предложения о том, как избавиться от там предупреждения?

public double CalculatePay() 
    { 
     return annualSalary/52; 
    } 

    public double CalculatePay(double modifiedSalary) 
    { 
     AnnualSalary = modifiedSalary; 
     return AnnualSalary/52; 
    } 
+0

вы должны показать также строку, которая вызывает 'CalculatePay()' ' – Raptor

+1

использовать ключевое слово override' – zsong

+2

Пожалуйста, не задавайте один и тот же вопрос дважды, если ваш вопрос не получает достаточного внимания, как решить проблему, заработав очки и наложив на него щедрость. Или сделайте некоторые исследования, большинство предупреждений компилятора хорошо документированы. Удачи! –

ответ

3

Чтобы избежать этого вы должны изменить код, чтобы что-то вроде

public class A 
{ 
    public virtual void TADA() 
    { 

    } 
} 

public class B : A 
{ 
    public override void TADA() 
    { 

    } 
} 

Посмотрите

virtual (C# Reference)

Виртуальное ключевое слово используется для изменения метод, свойство, индексатор или объявление события и разрешить его переопределение в объявлении erived класс.

При вызове виртуального метода тип времени выполнения объекта проверяется на переопределение элемента. Вызывается переопределяющий элемент в самом производном классе , который может быть исходным, если нет производный класс переопределил член.

По умолчанию методы не являются виртуальными. Вы не можете переопределить не виртуальный метод .

override (C# Reference)

Модификатор переопределения требуется, чтобы расширить или изменить абстрактную или виртуальную реализацию унаследованной метод, свойство, индексатор или события.

0

кажется родительский класс (или родителя его) уже есть такая же функция CalculatePay(), так что если вы хотите переписать его, просто объявить функцию замены:

public override double CalculatePay() 
{ 
    return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary)/52; 
} 
0

Вы скрывая функцию CalculatePay() вашего базового класса. Если это то, что вы хотите сделать, используйте модификатор new изменить код:

new public double CalculatePay() 
{ 
    return ((AnnualSalary * (ManagementLevel * BONUS_PERCENT)) + AnnualSalary)/52; 
} 

http://msdn.microsoft.com/en-us/library/aa691135(v=vs.71).aspx

+0

Спасибо за то, как избавиться от предупреждения – Jess