Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Prism Unter Net kann der linken Seite oft nichts zugewiesen werden (https://www.delphipraxis.net/45878-unter-net-kann-der-linken-seite-oft-nichts-zugewiesen-werden.html)

Mario 13. Mai 2005 13:57


Unter Net kann der linken Seite oft nichts zugewiesen werden
 
Hallo,

ich habe hier ein kleines Codebeispiel. Das wird unter Win32 problemlos kompiliert (ist nicht vollständig, nicht ausführen):

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

type
  TAufzaehlung = (aVal1, aVal2);

  TTestRec = record
    Aufzaehlung: TAufzaehlung;
    iVal: Integer;
  end;

  TTestClass = class
  public
    aRec: TTestRec;
    dVal: Double;
  end;

  TSuperClass = class
  private
    FTestClass: TTestClass;
  public
    property Testclass: TTestClass read FTestClass;
  end;

var aSuperClass: TSuperClass;
begin
  aSuperClass := TSuperClass.Create;
  aSuperClass.Testclass.dVal := 3.2;
  with aSuperClass.Testclass do begin
    aRec.iVal := 32;
    aRec.Aufzaehlung := aVal1;
  end;
  // Die zwei Zeilen können unter Net nicht
  // kompiliert werden:
  // Der linken Seite kann nichts zugewiesen werden
  aSuperClass.Testclass.aRec.iVal := 32;
  aSuperClass.Testclass.aRec.Aufzaehlung := aVal1;
end.
Die zwei unteren Zeilen können allerdings nicht kompiliert werden, da der linken Seite angeblich nichts zugewiesen kann. Wieso ist das denn so?

jbg 13. Mai 2005 14:06

Re: Unter Net kann der linken Seite oft nichts zugewiesen we
 
Weil es sich dabei um einen ValueType (in Delphi: record) handelt. Und diese wie z.B. ein Integer behandelt werden. Somit kannst du einem ValueType nur einen ValueType zuweisen, aber nicht direkt den Feldern des ValueTypes.

Mario 13. Mai 2005 14:11

Re: Unter Net kann der linken Seite oft nichts zugewiesen we
 
Hmm, das überzeugt mich eigentlich nicht. Das With zwei Zeilen drüber macht eigentlich genau das, was Du jetzt ausgeschlossen hast, oder irre ich mich da?

Ich habe noch mal weiter probiert. Wenn man die property, wo die Klasse zurückgegeben wird raushaut und durch die Variable ersetzt, kompiliert Delphi wieder. Aber verstanden warum, habe ich es damit leider immer noch nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:45 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