2015-07-29 2 views
-1

У меня есть сотрудник класса, в котором у меня есть статическая функция с сотрудником числа счетчиков и числовое число сотрудников (например, учитель, помощник учителя, личный помощник и т. Д.). Для этого у меня есть статический класс внутри, у меня есть статическое количество для числа сотрудников и внутри каждого подкласса. Я хочу получить доступ к статическому методу базового класса.Вызов статической функции из базового класса

class Employee{ 
    private static int emp; 
    //...code 

    static void IncreaseEmployeeCount() 
    { 
     emp=emp+1; 
    } 

} 

class Teacher : Employee{ 
    private static int tchr; 

    //...code 

    static void IncreaseTeacherCount() 
    { 
     tchr = tchr + 1; 
    } 
} 

Как получить доступ к статическому методу базового класса с использованием дочернего класса. Он попытался использовать следующее, но не с компиляции ошибки времени:

Teacher teacher = new Teacher(); 
teacher.IncreaseEmployeeCount(); 

'Employee.IncreaseEmployeeCount()' is inaccessible due to its protection level

Добавление public уровень доступа по-прежнему выдает ошибку:

Member 'Employee.IncreaseEmployeeCount()' cannot be accessed with an instance reference; qualify it with a type name instead

+2

Почему вы добавили тег 'C++' к этому вопросу? – nbro

+0

вам следует попробовать super.employeeCount() вместо tch. tch - это экземпляр, а не сам класс. employeeCount() - это функция на уровне класса, а не на уровне экземпляра. –

+0

@AlexeiLevenkov: Помимо возврата значения от каждой из статических функций, код допустим C#. – PaulF

ответ

0

Как статический метод, вы не можете получить доступ к нему через экземпляр класс. Вы делаете это, как этот

Teacher.IncreaseEmployeeCount(); 

Notes исходного образца были другие ошибки компиляции: метод

  • Базовый класс должен объявлен public.
  • Выравнивание возвращает значение с телом метода, поскольку оно объявлено как int и должно быть void или иметь return {something};.
+0

Это не сработает. Статические методы не наследуются дочерними классами, они специфичны/связаны с классом, а не с экземплярами. Поэтому нужно называть его как 'employee.employeeCount()' –

+0

В C# они наследуются - попробуйте его и посмотрите. Вы можете получить предупреждение Resharper «Доступ к статическому члену типа через производный тип», но это предупреждение, а не ошибка компилятора. – PaulF

+0

Вы правы, это действительно работает, я дам вам это. Однако это поведение является просто ярлыком, предоставленным компилятором. Синтаксис сахара. 'teacher.employeeCount()' будет просто компилироваться в 'employee.employeeCount()'. Как я уже сказал, «учитель» не имеет статического члена 'employeeCount()', потому что статические члены не наследуются. –

3

Должно быть Employee.IncreaseEmployeeCount() и Teacher.IncreaseTeacherCount(). Помните, что это статические методы, поэтому они не привязаны к экземпляру. Вы просто вызываете их через ClassName.StaticMethod()