AGB  ·  Datenschutz  ·  Impressum  







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

Record Zugriff umleiten...

Ein Thema von Mavarik · begonnen am 1. Aug 2012 · letzter Beitrag vom 15. Aug 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#1

Record Zugriff umleiten...

  Alt 1. Aug 2012, 12:01
Moin Zusammen...

Ich stehe heute Morgen etwas auf dem Schlauch, daher brauche ich Eure Hilfe.

Folgendes Problem:

Delphi-Quellcode:
type

    TMyData = Record
               A : Shortstring
               B : Integer
               // usw...
             end;
var
  V1,V2 : TMyData;
begin
  // Beispielbenutzungen
  V1 := V2;
  Move(V1,V2,sizeof(V1));
  Blockwrite(f,V1,Sizeof(F));
  // usw.
end.
Ich möchte jetzt aus dem Record eine classe machen um bei jedem Zugriff auf die Variable eine Procedure aufrufen zu können. Habe mir schon die Überladenen Operatoren angesehen. Eine Property hilft leider auch nicht oder doch?



Hat jemand ne Idee?

Mavarik
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 12:04
Beim direkten Zugriff auf den Speicher, helfen Properties nicht. Mir wäre auch keine Funktionalität bekannt, welche das so unterstützen würde.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 12:50
Klasse: Operatoren gibt es aber derzeit nur für Records. (wobei es für Interfaces technisch auch möglich sein sollte, falls Emba mal irgendwann auf mich hört)

Das Move/BlockWrite/BlockRead kannst du dir höchstens selber implementieren, als Read-/Write-Methode, was man notfalls über die RTTI etwas automatisieren könnte.
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 13:12
das blockwrite ist so ja nicht zugebrauchen, aber warum sollte das mit den Gettern/Settern nicht funktionieren?
Ggf. benutzt man halt Pointer oder hab ich da etwas falsch verstanden?

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 13:19
Wenn im Programm der Spicherbereich direkt überschrieben wird, wird der Setter ja nicht aufgerufen.
Markus Kinzler
  Mit Zitat antworten Zitat
Iwo Asnet

Registriert seit: 11. Jun 2011
313 Beiträge
 
#6

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 15:14
Ich versteh das Problem nicht ganz, denn ich würde eine Assign- btw. AssignTo-Methode implementieren und damit das Problem umgehen.

Oder möchtest Du es kodekompatibel gestalten, um wenig Arbeit bei der Umwandlung von Record->Klasse zu haben? Das würde ich nicht machen, denn dein Code wäre nur sehr schwer zu verstehen. Per definitionem ist eine Zuweisung bei Objekten eine Zeigerzuweisung und keine Kopieroperation.

Oder meinst Du, das Du jeden Lesezugriff auf die Instanz kontrollieren möchtest, quasi einen Getter für 'Self'? Dann verwende vielleicht einen kleinen Wrapper:

Delphi-Quellcode:
Type
  TObjectAccessSentinel = Class
  private
    Function GetObject : TMyObject; // <<--- hier deine Kontrollroutine für den Zugriff
  Public
    Constructor Create (aObject : TMyObject)
    Property Object : TMyObject Read GetObject;
  End;
Du erstellst dann den Wrapper und arbeitest nicht direkt mit (z.B.) V1, sondern mit dem Wrapper.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 15:18
Ich verstehe glaube ich nicht so 100%ig was du genau willst.
Und ich glaube die anderen die bisher geantwortet haben auch nicht so richtig.

Delphi-Quellcode:
TMyData = Record
private
  FText: String;
  function GetText: String;
  procedure SetText(const AValue: String);
public
  property Text: String read GetText write SetText;
end;

// ODER als Klasse:

TMyData = class
private
  FText: String;
  function GetText: String;
  procedure SetText(const AValue: String);
public
  property Text: String read GetText write SetText;
end;
In dem Getter/Setter kannst du dann jeweils irgendetwas tun wenn die Property gelesen oder geschrieben wird.

Die Getter/Setter können allerdings nicht auf soetwas wie

Delphi-Quellcode:
V1 := V2;
Move(V1,V2,sizeof(V1));
Blockwrite(f,V1,Sizeof(F));
reagieren. Da funktioniert es nicht und da gibt es auch keine Lösung das zu realisieren.

Bei Klassen sind die 3 oberen Möglichkeiten des Kopierens ja gar nicht möglich, also erübrigt sich die Frage dafür.

Wenn direkt auf FText zugegriffen wird und quasi dadurch die Property inkl. Getter/Setter umgangen wird, dann bekommen Getter und Setter natürlich auch nichts davon mit.
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#8

AW: Record Zugriff umleiten...

  Alt 1. Aug 2012, 23:05
Vielleicht erklärst Du noch, was Du eigentlich erreichen willst. Mir scheint, Du denkst in diesem Fall vielleicht einen Tick zu kompliziert.
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.144 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Record Zugriff umleiten...

  Alt 14. Aug 2012, 14:15
Danke erstmal für eure Antworten...

Halten wir mal fest, es gibt keine Lösung!

Grüsse Mavarik
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Record Zugriff umleiten...

  Alt 14. Aug 2012, 14:45
Halten wir mal fest, es gibt keine Lösung!
Ich würde eher sagen, du hast noch nicht die richtige Ebene der Abstraktion erreicht.
Du klammerst dich an einen Record obwohl es auch wesentlich flexiblere Datenstrukturen gibt.
Nehmen wir z.B. ein Diktionary:
Delphi-Quellcode:
var
  dict, dict2 : TMyDictionary;
begin
  dict := TMyDictionary.Create;
  dict['A'] := 42;
  dict['B'] := 'Teststring';
  dict['Visible'] := True;
 
  // Beispiel für einen Copy-Konstruktor
  dict2 := TMyDictionary.Create(dict);
  // dict2 enthält jetzt alle Daten von dict

  dict2.SaveToFile('data.txt');
  dict2.Free;
  dict.Free;
end;
Indem du dich von einem Record löst und Datenstrukturen auf einer höhere Abstraktionsebene verwendest kannst du mehr erreichen.
Natürlich ist dies immer auch mit einem gewissen Verlust an Geschwindigkeit verbunden, aber das ist meist kaum zu spüren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 09:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz