2017-01-22 4 views
1

У меня есть базовый классКак получить доступ к части членов базового класса

class Administrator() 
    { 
     void addEmployee(){ some code }; 
     void Salary_PaySlip() { some code }; 
    } 
class HR: Administrator 
    { 
      // make use of addEmployee() 
    } 
class Accountant: Administrator 
    { 
      // make use of void Salary_PaySlip() 
    } 

Это просто пример.

Здесь я хочу Accountant использовать метод Salary_PaySlip(). Метод addEmployee() не должен быть доступен Accountant. Точно так же class HR должен иметь доступ только к методу addEmployee().

Может ли кто-нибудь помочь мне решить эту проблему?

Заранее спасибо

+0

вар с = нового администратора(); –

+2

Разве этот крик «не использует наследование», или я чего-то не хватает? Что передают HR и Бухгалтер через Администратора? –

+1

Почему бы не переместить эти два метода в их соответствующие производные классы? - если наследование необходимо. Я не понимаю! –

ответ

3

Ваша проблема может быть sumarized как единой ответственности Принцип, который является весьма связано с интерфейсом сегрегация Принцип (я предлагаю вам проверить SOLID принципы объектно-ориентированного проектирования: https://en.wikipedia.org/wiki/SOLID_(object-oriented_design))

You созданный администратором класса, который может одновременно добавлять сотрудников и PaySlip. Однако вы хотите отделить тех, кто уполномочен использовать часть вашего класса. Это знак того, что этот класс должен быть разделен на два разных класса. Один для каждого метода.

После этого вы сможете создавать свои «клиентские» классы (те, кто использует методы). Я предлагаю вам использовать состав, а не наследование, чтобы в конечном итоге получить доступ к вашим частям администратора, поскольку он не уверен, что имеет смысл иметь эту ссылку наследования.

Пример кода, который, конечно, не имеет отношения пока (но не лучше обойтись без дополнительной информации)

public class EmployeeAdministrator() 
{ 
    public void addEmployee(){ some code }; 
} 

public class SalaryAdministrator() 
{ 
    public void Salary_PaySlip() { some code }; 
} 

public class HR 
{ 
    public EmployeeAdministrator Administrator { get; } 
    // make use of addEmployee() 
} 

class Accountant 
{ 
    public SalaryAdministrator Administrator { get; } 
    // make use of void Salary_PaySlip() 
} 
+0

Спасибо человеку. Эта концепция кажется более простой. Еще раз спасибо за ссылку – IJAS

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