2013-08-21 3 views
0

Я пытаюсь наследовать абстрактные элементы из производного класса, и он не работает. Я установил класс как абстрактный, напримерC# Внедрить унаследованный абстрактный элемент

Теперь моя основная программа говорит то же самое о CalculateWeeklyPay(), и мне не нужно это в моем основном классе. Как я могу это исправить?

+2

Как вы объявляете свою сущность 'Hourly'? Если он используется как Employee, он попытается использовать унаследованный метод, а не переопределенный. –

+3

Не могли бы вы дать полное определение абстрактного класса? – usha

+1

Вы должны [переопределить] (http://msdn.microsoft.com/en-us/library/ebca9ah3.aspx) absract members –

ответ

0

output += "\n\t Weekly Pay:\t" + CalculateWeeklyPay().ToString("C2");

CalculateWeeklyPay ожидает 2 аргумента: размер заработной платы и часов. Удалить эти аргументы из определения, и он будет работать:

public override double CalculateWeeklyPay() 
{ 
    ... 
} 
+0

Как только я удалил определения, я получаю предупреждение о том, что говорит Employee.Hourly.CalculateWeeklyPay() 'скрывает унаследованный член' Employee.Employee.CalculateWeeklyPay() '. Чтобы заставить текущий элемент переопределить эту реализацию, добавьте ключевое слово переопределения. В противном случае добавьте новое ключевое слово. , а также с 2 ошибками – Jess

+0

Вероятно, вы получите предупреждение, потому что оно также указано в вашем абстрактном классе - используйте оператор переопределения. Я обновил ответ для соответствия. –

+0

Как вы его переопределите? Ошибка: Тип 'Employee.Employee' уже определяет член, называемый CalculateWeeklyPay, с теми же параметрами – Jess

3
// Pay method 
public double CalculateWeeklyPay(double Hours, double Wage) 
{ 
    return Hours * Wage; 
} 

Список параметров для CalculateWeeklyPay скрывается членов класса Hours и Wage. Я подозреваю, что вы хотите вместо этого:

// Pay method 
public double CalculateWeeklyPay() 
{ 
    return Hours * Wage; 
} 

На самом деле, я хотел бы пойти еще дальше и сделать его свойство только для чтения вместо:

// Pay method 
public double WeeklyPay 
{ 
    get { return Hours * Wage; } 
} 
1
output += "\n\t Weekly Pay:\t" + CalculateWeeklyPay().ToString("C2"); 

Вы определяете public double CalculateWeeklyPay(double Hours, double Wage), но в этом функции нет двух двойных чисел. Это неправильно.

+0

Я не уверен, что вы имеете в виду здесь. Он не называет это с 2-мя номерами, которые я ожидаю, это то, что вы должны иметь в виду. –

+0

Я не очень хорош на английском, так что извините. – PengWu

1
public override double CalculateWeeklyPay(){...} 

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

+0

Я исправил ошибку в своем классе Hourly, но затем сделал то же самое для моего класса программы. Я не думаю, что мне нужно поставить тот же самый метод в мой класс программы – Jess

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