|
модификаторы доступа
|
|||
---|---|---|---|
#18+
Господа, доброго времени. чет туплю, подскажите как лучше реализовать следующую картинку: есть некий класс Worker c запротекчеными методами Run() и Stop(); и есть некий класс WorkerManager которому позволено: а) создавать инстансы Worker: типа какой нибудь статический метод CreateNewWorker б) иметь статический метод Start(Worker instance) который запускает у интанса Run в) иметь статический метод Stop(Worker instance) который запускает у инстанса Stop Но при этом ввести ограничение что из любого другого места программы (в той же сборке) невозможно было бы создать инстанс Worker явно или явно вызвать Run у инстанса класс Worker. То есть все манипуляции с классом Worker разрешено делать только через WorkerManager. В идеале должно получиться что то типа Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
//Классы Program, WorkerManager, Worker находятся в одной сборке. Разносить бы не хотелось Вариант с рефлексией не рассматриваем. Хотелось бы как то нарисовать картинку через модификаторы доступа, использованием интерфейсов, etc. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 17:08 |
|
модификаторы доступа
|
|||
---|---|---|---|
#18+
felix_ff Господа, доброго времени. чет туплю, подскажите как лучше реализовать следующую картинку: есть некий класс Worker c запротекчеными методами Run() и Stop(); и есть некий класс WorkerManager которому позволено: а) создавать инстансы Worker: типа какой нибудь статический метод CreateNewWorker б) иметь статический метод Start(Worker instance) который запускает у интанса Run в) иметь статический метод Stop(Worker instance) который запускает у инстанса Stop Но при этом ввести ограничение что из любого другого места программы (в той же сборке) невозможно было бы создать инстанс Worker явно или явно вызвать Run у инстанса класс Worker. То есть все манипуляции с классом Worker разрешено делать только через WorkerManager. В идеале должно получиться что то типа Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
//Классы Program, WorkerManager, Worker находятся в одной сборке. Разносить бы не хотелось Вариант с рефлексией не рассматриваем. Хотелось бы как то нарисовать картинку через модификаторы доступа, использованием интерфейсов, etc. тьфу ты блин. хотел нажать "изменить" а тыкнул походу новое сообщение. p.s. я знаю, что возможно архитектурно такой подход в целом изначально неверный, но просто интересно какие могут быть воркароунды ... |
|||
:
Нравится:
Не нравится:
|
|||
03.10.2020, 17:10 |
|
модификаторы доступа
|
|||
---|---|---|---|
#18+
есть модификатор "internal protected", конструктор класса может быть internal, так вы сделайте ограничение на инстанцирование типа только из вашей сборки ... |
|||
:
Нравится:
Не нравится:
|
|||
04.10.2020, 22:14 |
|
модификаторы доступа
|
|||
---|---|---|---|
#18+
felix_ff, вынести публичный контракт Woker в public-интерфейс (разумеется, мтодов Run/Stop там не должно быть). Саму реализацию сделать internal, WorkerManager разместить в той же сборке, он будет приводить интерфейс к internal-классу, и работать с ним. Вне сборки отдается только паблик-интерфейс. Как-то так: Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
Roman Mejtes есть модификатор "internal protected" только не стоит забывать, что этот модификатор означает не "protected AND internal", а означает "protected OR internal". Соответственно, если тип содержит internal protected мембера, и сам тип является public, то отнаследовавшись от этого типа можно легко обращаться к мемберам с таким типом доступа. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.10.2020, 06:41 |
|
|
start [/forum/topic.php?fid=20&msg=40005351&tid=1398464]: |
0ms |
get settings: |
9ms |
get forum list: |
11ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
38ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 124ms |
0 / 0 |