Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Incompatible Typen... Umgehen? (https://www.delphipraxis.net/41065-incompatible-typen-umgehen.html)

Kedariodakon 25. Feb 2005 10:54


Incompatible Typen... Umgehen?
 
Mal wieder ne Hirnsinsfrage meinerseits :zwinker:
Kann man hier die Fehlermeldung umgehen ohne Neue Funktionen schreiben zu müssen?

Delphi-Quellcode:
Type
   TSomething   = Class
   Private
      { Private Deklarationen }
      fCheckedFlag:   Boolean;
      FIsValid:         Boolean;
      Function GetIsValid( Const IgnoreCheckedFlag: Boolean = False ):   Boolean;
   Public
      { Public-Deklarationen }
      Property   IsValid:   Boolean   Read GetIsValid;
   End;

Implementation

{ Something }

Function TSomething.GetIsValid( Const IgnoreCheckedFlag: Boolean = False ):   Boolean;
Begin
   If   ( Not( fCheckedFlag ) Or IgnoreCheckedFlag )   Then Begin
      //   Check   ....
      //   FIsValid   :=   ...;
      fCheckedFlag := True;
   End;
   Result   := FIsValid;
End;
Problem ist das:
Delphi-Quellcode:
Property IsValid: Boolean Read GetIsValid;
Welches ja das:
Delphi-Quellcode:
Function GetIsValid( Const IgnoreCheckedFlag: Boolean = False ): Boolean;
Aufruft..
Der Compiler sieht das ganze als Problem an :wall: , ich aber net wirklich :stupid:
Kann ich dem irgedwie weiß machen das das kein Problem ist, ohne weitere unnötige checkfunktionen schreiben zu müssen?

Bye

NicoDE 25. Feb 2005 11:04

Re: Incompatible Typen... Umgehen?
 
Zitat:

Zitat von Kedariodakon
Der Compiler sieht das ganze als Problem an :wall: , ich aber net wirklich :stupid:

Der Compiler erwartet einen bestimmten Funktions-Typ ( function GetIsValid: Boolean; ).

sniper_w 25. Feb 2005 11:04

Re: Incompatible Typen... Umgehen?
 
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs;

type
  TForm1 = class(TForm)
  private
    { Private declarations }
  public
    { Public declarations }
  end;

Type
   TSomething  = Class
   Private
      { Private Deklarationen }
      fCheckedFlag:  Boolean;
      FIsValid:        Boolean;
      Function GetIsValid(  {IgnoreCheckedFlag: Boolean = False }):  Boolean;
   Public
      { Public-Deklarationen }
      Property  IsValid:  Boolean  Read GetIsValid;
   End;

var
  Form1: TForm1;

Implementation

{ Something }

Function TSomething.GetIsValid( {IgnoreCheckedFlag: Boolean = False }):  Boolean;
Begin
   If   Not( fCheckedFlag ) {Or IgnoreCheckedFlag )}   Then Begin
      //   Check  ....
      //   FIsValid  :=  ...;
      fCheckedFlag := True;
   End;
   Result  := FIsValid;
End;


{$R *.dfm}

end.
So geht das ganze. Allgemein "Get" funktionen dürfen keinen Parameter übergeben, nur "Set".

Kedariodakon 25. Feb 2005 11:14

Re: Incompatible Typen... Umgehen?
 
Zitat:

Zitat von sniper_w
So geht das ganze.

Das das so geht is klar :mrgreen:

Zitat:

Zitat von sniper_w
Allgemein "Get" funktionen dürfen keinen Parameter übergeben, nur "Set".

Die Aussage ist Falsch!

Beispiel:
Delphi-Quellcode:
Unit Unit1;

Interface

Uses   SysUtils;

Const
   cSomethingThing: Array[ 1..4 ] Of   String = (   'Quark',
                                                                        'Torte',
                                                                        'Sahne',
                                                                        'Kirsch' );

Type
   TSomeThing   = Class
   Private
      Function GetASomeSingDingeWing( Const Index: Integer): String;
      { Private-Deklarationen }
   Public
      { Public-Deklarationen }
      Property   MySomeSingDingeWing1:   String   Index 1 Read GetASomeSingDingeWing;
      Property   MySomeSingDingeWing2:   String   Index 2 Read GetASomeSingDingeWing;
      Property   MySomeSingDingeWing3:   String   Index 3 Read GetASomeSingDingeWing;
      Property   MySomeSingDingeWing4:   String   Index 4 Read GetASomeSingDingeWing;
   End;


Implementation

{ TSomeThing }

Function TSomeThing.GetASomeSingDingeWing( Const Index: Integer ):   String;
Var   i: Integer;
Begin
   Result   := '';
   //   DoSomething...
   For   i   := 1 To   Index Do Begin
      Result   :=   Result   + cSomethingThing[ Index ];
   End;
End;

end.
Zwar Sinnlos, aber egal :zwinker:

Bye

maximov 25. Feb 2005 11:30

Re: Incompatible Typen... Umgehen?
 
Das geht schon, aber nicht ohne eins von beiden zu ändern. Wenn nicht die fubnktion, dann halt die property:

Zitat:

Zitat von Kedariodakon
Mal wieder ne Hirnsinsfrage meinerseits :zwinker:
Kann man hier die Fehlermeldung umgehen ohne Neue Funktionen schreiben zu müssen?

Delphi-Quellcode:
...      { Public-Deklarationen }
      Property   IsValid[Const IgnoreCheckedFlag: Boolean]:   Boolean   Read GetIsValid;
   ....

:wink:

jim_raynor 25. Feb 2005 11:32

Re: Incompatible Typen... Umgehen?
 
Zitat:

Zitat von Kedariodakon
Zitat:

Zitat von sniper_w
So geht das ganze.

Das das so geht is klar :mrgreen:

Zitat:

Zitat von sniper_w
Allgemein "Get" funktionen dürfen keinen Parameter übergeben, nur "Set".

Die Aussage ist Falsch!

Bye

Warum. Da steht, allgemein.

Eine weitere Ausnahme ist, wenn du es als Array Property hast. Also:

Delphi-Quellcode:
property IsValue[Index: Integer]: Boolean read GetIsValue;
Dann muss die Funktion einen Integer-Paramter haben.

Kedariodakon 25. Feb 2005 11:48

Re: Incompatible Typen... Umgehen?
 
Zitat:

Zitat von jim_raynor
Warum. Da steht, allgemein.

Überlesen :zwinker:


Hätte ja sein können das es auch sowas wie index für boolsche WErte gibt...

Bye

sniper_w 25. Feb 2005 13:59

Re: Incompatible Typen... Umgehen?
 
Ich dachte mit "Allgemein", dass "Get" Funktionen nicht dafür vorgesehen sind, sonst macht man das irgend wie anders. Man will ja mit GET üblicherwiese nur ein Wert entsprechend auslesen. :wink:

Kedariodakon 25. Feb 2005 14:04

Re: Incompatible Typen... Umgehen?
 
Zitat:

Zitat von sniper_w
Ich dachte mit "Allgemein", dass "Get" Funktionen nicht dafür vorgesehen sind, sonst macht man das irgend wie anders. Man will ja mit GET üblicherwiese nur ein Wert entsprechend auslesen. :wink:

Genau "entsprechend" ist das Zauberwort. :zwinker:

Naja habs nun noch mit einer zweiten Funktion gemacht, welche aber eigendlich 4 Zeilen unnützen Code darstellen :coder:
+ Dekleration = 5 :wink:

Bye


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