![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.02.2004 Skąd: z piekla Ostrzeżenie: (0%) ![]() ![]() |
Witam,
czy jest możliwość aby konstruktor w jakiś sposób pozwalał lub blokował tworzenie danego obiektu? W żaden sposób nie mogę tego ugryźć a potrzebuję danej funkcjonalności. Pozdrawiam // edycja Napiszę na przykładzie o co mi chodzi.
Ten post edytował byq_pl 9.09.2010, 10:01:35 -------------------- "Wyobraźnia jest ważniejsza od wiedzy." - Albert Einstein
|
|
|
![]()
Post
#2
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Tak. Np ustawisz mu metodę dostępu na prywatną (private) bądź chronioną (protected)
-------------------- |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.02.2004 Skąd: z piekla Ostrzeżenie: (0%) ![]() ![]() |
Tak. Np ustawisz mu metodę dostępu na prywatną (private) bądź chronioną (protected) Niestety chodzi mi o coś innego. Tak stworzony konstruktor spowoduje błąd podczas tworzenia obiektu poza metodami klasy. Chciałbym aby błędu nie było i obiekt nie był w ogóle tworzony. -------------------- "Wyobraźnia jest ważniejsza od wiedzy." - Albert Einstein
|
|
|
![]()
Post
#4
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Ale dlaczego nie chcesz żeby był tworzony? Jaki masz w tym cel?
-------------------- |
|
|
![]()
Post
#5
|
|
![]() Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.02.2004 Skąd: z piekla Ostrzeżenie: (0%) ![]() ![]() |
Przypuśćmy, że mapuję bazę danych. I jeżeli obiekt o danym ID istnieje w innym miejscu nie chcę aby ten obiekt był tworzony. Jest mi on w ogóle nie potrzebny.
-------------------- "Wyobraźnia jest ważniejsza od wiedzy." - Albert Einstein
|
|
|
![]()
Post
#6
|
|
![]() Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk ![]() |
Co tzn z innym miejscu? Podaj bardziej obrazowy przykład.
-------------------- |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 172 Pomógł: 13 Dołączył: 15.11.2009 Ostrzeżenie: (0%) ![]() ![]() |
Nie za bardzo rozumiem o co Tobie chodzi, ale może dobrym rozwiązaniem będzie zaimplemntowanie wszystkich metod jako statyczne
|
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 15 Pomógł: 0 Dołączył: 29.08.2010 Ostrzeżenie: (0%) ![]() ![]() |
Mu chodzi o to
masz folder -folder | plik.txt + folder_dane On chce stworzyć blokadę jak byś chciał zrobić "plik.txt" w "folder_dane" to wywali ci błąd że taki plik istnieje w innym katalogu. |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 28 Pomógł: 0 Dołączył: 19.02.2004 Skąd: z piekla Ostrzeżenie: (0%) ![]() ![]() |
Mu chodzi o to masz folder -folder | plik.txt + folder_dane On chce stworzyć blokadę jak byś chciał zrobić "plik.txt" w "folder_dane" to wywali ci błąd że taki plik istnieje w innym katalogu. Dokładnie. Natomiast najważniejsze jest dla mnie aby: konstruktor POZWALAŁ lub NIE* na stworzenie obiektu z którego jest wywoływany (*od razu niszczył sam siebie). Nawet jak konstruktor zwróci false to jest to ignorowane i obiekt i tak jest tworzony. Wywoływanie destruktora w konstruktorze też nie pomaga. -------------------- "Wyobraźnia jest ważniejsza od wiedzy." - Albert Einstein
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Moderatorzy Postów: 36 557 Pomógł: 6315 Dołączył: 27.12.2004 ![]() |
Cytat Nawet jak konstruktor zwróci false to jest to ignorowane i obiekt i tak jest tworzony. Bo kontruktor zwraca obiekt i nic wiecej ani mniej.Rzuć w konstruktorze wyjątkiem i po sprawie. -------------------- "Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista "Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 1 Pomógł: 0 Dołączył: 10.09.2010 Ostrzeżenie: (0%) ![]() ![]() |
Witam.
Jak na moje oko chodzi ci mniej wiecej o singleton. Poszukaj sobie o ty. design patterns + singleton i chyba po problemie. Pozdrawiam. |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 952 Pomógł: 154 Dołączył: 20.01.2007 Skąd: /dev/oracle Ostrzeżenie: (0%) ![]() ![]() |
Doprecyzowanie ad. powyższego postu -> konstruktor nic nie zwraca, nawet tworzonego obiektu. Nie da się zablokować tworzenia obiektu na etapie wykonywania, ponieważ konstruktor jest wywoływany, gdy obiekt jako taki już istnieje. Wyjątek powstrzyma jedynie jego zwrócenie przez operator new, a wrażenie "nieutworzenia" powodowane jest przez to, że najczęściej taki obiekt od razu trafia do odśmiecacza. Jednak wciąż istnieje dla niego możliwość przeżycia i poniżej pokazuję skrypt, który to demonstruje:
Natomiast istnieje możliwość kontrolowania samego zachodzenia procesu tworzenia obiektu poprzez zadeklarowanie konstruktora jako metody prywatnej lub chronionej, co zostało już wyżej wspomniane. Ten post edytował Zyx 11.09.2010, 19:27:28 -------------------- Specjalista ds. głupich i beznadziejnych, Zyx
Nowości wydawnicze: Open Power Collector 3.0.1.0 | Open Power Autoloader 3.0.3.0 |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Rozwiązaniem mogłoby być coś takiego (o ile dobrze zrozumiałem)
Jednakże wg mnie źle kombinujesz i nie powinieneś robić czegoś takiego. To czy obiekt powinien być w ogóle utworzony powinno być sprawdzane przed próbą jego utworzenia, a nie w samym obiekcie/klasie. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 11:35 |