AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Interfaces ohne Referenzzählung?

Ein Thema von idefix2 · begonnen am 18. Okt 2010 · letzter Beitrag vom 19. Okt 2010
Antwort Antwort
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#1

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 16:39
Die Objekte, um die es geht, sind Ableitungen verschiedenster Komponenten, die also normalerweise automatisch gelöscht werden, wenn ihr Owner - das Formular - gelöscht wird.

Das Interface, das ihnen allen gemeinsam ist, enthält z.B. eine function IsValid: boolean
Dazu wird ein Nachkomme von TForm implementiert, der zum passenden Zeitpunkt alle Komponenten des Formulars durchgeht, und bei den Komponenten, die dieses Interface implementieren, die Gültigkeit der Eingabe mittels IsValid prüft.

Nachdem Formularkomponenten ohnehin automatisch richtig freigegeben werden, möchte ich nicht durch die Einführung eines Interface eine völlig überflüssige und u.U. schädliche Referenzzählung zusätzlich haben. Mir ist aber eben nicht klar, für welche Objekte Delphi die automatische Referenzzählung aktiviert. Genügt es, dass irgend ein beliebiges Interface angegeben wird, um die Referenzzählung auszulösen, oder kann ich Interfaces definieren, die das nicht machen?

Klarerweise kann ich nicht von TInterfacedPersistent ableiten, weil es sich eben um Nachkommen von Tedit, tmemo etc. handelt, denen ein zusätzliches, gemeinsames Interface umgehängt werden soll.

Geändert von idefix2 (18. Okt 2010 um 16:45 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#2

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 16:42
Dann könntest du auch bei Objekten bleiben.

Du leitest alle entsprechenden Komponenten von einem gemeinsamen Vorfahren ab, welcher IsValid als virtuelle Methode implementiert.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 16:46
Die Referenzzählung erfolgt nicht im Interface, sondern im Objekt das mit dem Interface verbunden deklariert wird. Automatisch implementiert ist das bei TInterfacedObject. Dazu kannst du dir den Quelltext anschauen, wie die Referenzzählung dort umgesetzt ist.

Dann weißt du auch wie man das abstellen kann

(IInterface als Basis-Interface schreibt nur zwingend vor, dass die Methoden für die Referenzzählung implementiert werden müssen)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#4

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 17:01
@himitsu
Ich kann die Komponenten nicht von einen gemeinsamen Vorfahren ableiten weil es in Delphi ja keine Mehrfachvererbung gibt. Ich brauch Ableitungen von TEdit, TMemo, TCombobox etc. Und ich will in meinem abgeleiteten Formular einfach isvalid für alle Komponenten aufrufen, die das Interface implementieren (und true für alle anderen annehmen).

@ Sir Rufo
Danke, ich werde mir den Quellcode anschauen. Muss eigentlich ein Interface zwingend von IInterface abgeleitet werden?
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 17:03
IInterface ist wie das TObject bei Klassen, davon wird immer abgeleitet
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#6

AW: Interfaces ohne Referenzzählung?

  Alt 18. Okt 2010, 17:03
In Delphi ja ... wenn man kein Vorfahreninterface angibt, dann wird automatisch IInterface genommen.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.487 Beiträge
 
Delphi 12 Athens
 
#7

AW: Interfaces ohne Referenzzählung?

  Alt 19. Okt 2010, 08:20
@himitsu
Ich kann die Komponenten nicht von einen gemeinsamen Vorfahren ableiten weil es in Delphi ja keine Mehrfachvererbung gibt. Ich brauch Ableitungen von TEdit, TMemo, TCombobox etc.
Da es sich bei diesen Klassen um Ableitungen von TComponent handelt, ist die Referenzzählung sowieso schon ausgeschalten. Das hat Panthrax bereits geschrieben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.313 Beiträge
 
Delphi 12 Athens
 
#8

AW: Interfaces ohne Referenzzählung?

  Alt 19. Okt 2010, 09:31
Da es sich bei diesen Klassen um Ableitungen von TComponent handelt, ist die Referenzzählung sowieso schon ausgeschalten. Das hat Panthrax bereits geschrieben.
Nee, ich hatte gemeint dieses ganz normal als virtuelle Methode zu implementieren und nicht über Interfaces, aber dieser Weg ist ja nun eh nicht gewollt.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
idefix2

Registriert seit: 17. Mär 2010
Ort: Wien
1.027 Beiträge
 
RAD-Studio 2009 Pro
 
#9

AW: Interfaces ohne Referenzzählung?

  Alt 19. Okt 2010, 14:30
Das hat nichts mit "nicht gewollt" zu tun.

Ich habe einige verschiedene Komponenten, die zusätzliche Methoden implementieren. Wenn das Formular alle Komponenten durchgeht, soll es auf einfache Weise feststellen können, welche Komponenten diese Methoden implementieren und welche nicht, und die gleichen Methoden in den völlig verschiedenen Klassen auf einfache Art aufrufen können. Dafür eignet sich meines Wissens eigentlich nur die "supports" Funktion und das Interface-Konzept, alles andere wäre doch wesentlich komplizierter, oder?
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:43 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz