Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Добрый день. У меня вопрос -- можно ли в С# создать статический класс, подобно тому, как это можно было сделать в C++? Именно класс, а не статический метод, со всеми вытекающими последствиями -- например, с конструктором, вызывающимся перед выполнением метода Main? Упреждая вопрос, "зачем это нужно?", отвечу: хочу проинициализировать свою библиотеку независимо от того, создаются ли экземпляры класса в основной программе или нет... С уважением, ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 13:25 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
статическим бывает не класс - а объект...в С++ в том числе Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 13:42 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Мне кажется создавать класс со всеми методами static надо не для создания экземпляров объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 13:44 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
funikovyuriстатическим бывает не класс - а объект...в С++ в том числе Код: plaintext 1. 2. 3. 4. 5. 6. Ну и? Без создания экземпляра класса test внутрення статическая переменная тоже не будет создана, соответственно, конструктор не будет вызван... Увы... В с++ можно создать статический экземпляр класса, лежащий вне любого другого класса. При этом, как я уже писал, конструктор класса отработает до начала выполнения главной программы. В С# аналогичной функциональности не удалось добиться. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. Как видно из этого примера, статического экземпляра t класса Test не создается, конструктор, соответственно, не вызывается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 14:46 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Возможно вам чем-то поможет использование статического конструктора, он вызывается перед вызовом любого стат. метода или обращения к любому стат. свойству. Хотя это, конечно, не совсем то, что вы хотели... Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 15:05 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Витася Ну и? ну и используйте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 19:09 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
funikovyuri ну и используйте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Ну так ведь смысл вопроса-то был в чем? Сделать так, чтобы конструктор класса Test отрабатывал без всякого упоминания класса Test в основной программе! Если конкретнее -- хочется написать библиотечный класс, который бы создавал некий "глобальный" статический объект, инициализировал свои внутренние настройки при загрузке, и делал это все независимо от остальной части программы. В плюсах такая возможность была (путем создания статического экземпляра класса), в шарпе такая возможность, похоже, исчезла... Ближе всего ответ Alexey Kudinov-а по поводу статического конструктора. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Основной недостаток, который я вижу -- невозможность получения "глобального" объекта. Все равно экземпляр класса, хоть он и статический, но существует только в контексте класса EntryPoint, да и вообще надо явно его создавать... Хотелось бы как-нибудь так: ((с) масяня) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... и при этом чтобы класс DataLayer уже был проинициализирован, строка соединений прочитана из настроек, коннекшены в пуле пооткрываны и готовы к употреблению и вообще все было чики-пуки... А самое главное -- хочу обращаться к этому же пулу соединений из библиотечной формы, которая не обязана знать, как в каждом конкретном случае называется класс главной программы и откуда ей брать этот пул соединений... Неужели я хочу слишком многого? ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 21:09 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
в таком варианте конструктор будет вызван при первом обращении к классу StaticClass Код: plaintext 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. set 6590 method 6590 set 8989 get 8989 Main 8989 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.12.2004, 21:57 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Про паттерн Singleton слышали? Мне кажется он был уместен в данном случае. авторхочу проинициализировать свою библиотеку независимо от того, создаются ли экземпляры класса в основной программе или нет... Зачем инициализировать библиотеку, если ей не будут пользоваться? IMHO Когда попытаются получить соединение, тогда и стоит загружать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 13:50 |
|
||
|
Статический класс.
|
|||
|---|---|---|---|
|
#18+
Витася Основной недостаток, который я вижу -- невозможность получения "глобального" объекта. Все равно экземпляр класса, хоть он и статический, но существует только в контексте класса EntryPoint, да и вообще надо явно его создавать... Ну и что ? Пользователям ваших API обязательно знать внутреннюю организацию классов, доступа к которым у них все равно нет ? Кроме того, библиотеку вообще нельзя загрузить не "в контексте", на она и библиотека. Витася ... и при этом чтобы класс DataLayer уже был проинициализирован, строка соединений прочитана из настроек, коннекшены в пуле пооткрываны и готовы к употреблению и вообще все было чики-пуки... А самое главное -- хочу обращаться к этому же пулу соединений из библиотечной формы, которая не обязана знать, как в каждом конкретном случае называется класс главной программы и откуда ей брать этот пул соединений... Зачем ей знать как называется класс главной программы ? Или вы хотите, чтобы соединение создавалось и описывалось в "главной программе", но доступ к нему был и из библиотек ? Вы хотите написать Код: plaintext Мне кажется, что это более правильно, чем создавать соединение и все остальное прямо при загрузке библиотеки, т.к. не ясно, а будет ли нужно это соединение вообще. OFF Лично я не сторонник активного применения концепции lazy loading. Такой стиль программирования кажется красивым и изящным на стадии проектирования, но создает определенное число проблем при отладке, работе в Design Time, сборке программы. Непонятно что и когда создается и загружается. Компоненты "внезапно" начинают создавать соединение с сервером, что-то делать и т.п. К сожалению, часто видил это на практике. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.12.2004, 14:45 |
|
||
|
|

start [/forum/topic.php?fid=20&msg=32811846&tid=1437727]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
32ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 312ms |

| 0 / 0 |
