dołączanie unitow - uses

0

czy dołączenia unitow w delphi nie jest przechodnie?

podam przyklad:

mam klase X i klase Y ktora dziedziczy po klasie X. w zwiazku z tym w sekcji interface w module klasy Y dolaczam poprzez uses modul z klasa X.

teraz w jakims innym module chce wykozystac klase X oraz Y(polimorficznie).
bazujac na c++ i na logice wystarczy ze wlacze modul z klasa Y gdyz ten walcza modul klasy X w sekcji interface.
niestety kompilator krzyczy ze nie zna typu klasy bazowej i musze dolaczyc obydwa moduly.

skoro to dolaczanie nie zachowuje sie jak w C++ czyli nie jest przchodnie to czemu w miare mozliwosci nalezy dolaczac moduly w sekcji implementation bo ta nie jest wlaczana poprzez uses?
czemu tak jest skoro dolaczane moduly w sekcji interface nie przechodza dalej?

0

kod

0

yyy nie bardzo rozumiem co tu zobrazuje kod a czego nie "widac" po opisie.

plik unit1:

interface

// deklaracja klasy

implementation

// definicja klasy


plik unite2:

interface

uses unit1; <------ plik z klasa bazowa

type
klasa2 = class(klasa1)
.
.
.

implementation
// definicja klasy2

dalej np plik zrodlowy formatki:

chcesz wykozsytac klase1 i klase2 wiec np w implementation pisze:

uses
unit2; <----------- to powinno mi wlaczyc rowniez unit1 gdyz jest on w sekcji interface unitu2

dalej:

var
temp: klasa1; <----------- tu blad ze nie zna typu i musze dopisac w uses rowniez unit1 mimo iz logicznie patrzac powinien on byc juz wlaczone za posrednictwem unit2 (tak dziala #include)

skoro tu sie tak nie dzieje to czemu uses znajduje sie w sekcjach deklaracji oraz implementacji?

0

klasa1 jest w unit1 i to trzeba dodać do uses. Koniec, kropka

0

wiec czemu jest zalecany aby to co mozna dolaczac w sekcji implementacji tak zeby w deklaracji bylo jak najmniej dolaczonych modulow? nawet sa specjalne programu analizujace kod i przenoszace co sie do z interface do implementation.

po co ta cala zabawa skoro te sekcje nie sa przechodnie?

0

A chociażby dlatego, że jeśli jeden moduł wymaga drugiego, a ten drugi pierwszego, to nie ma innego sposobu jak dać uses w implementation.

0

w programowaniu obiektowym taka sytuacja oznacza ni mniej ni wiecej tylko to ze jest zly projekt. chyba ze mamy do czynienia ze skrajna sytuacja ktora zazwyczaj da sie jakos obejsc.

1 użytkowników online, w tym zalogowanych: 0, gości: 1