Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Muktiple Datentypen mit "with .. as" elegant verwenden? (https://www.delphipraxis.net/107660-muktiple-datentypen-mit-elegant-verwenden.html)

Zacherl 31. Jan 2008 11:11


Muktiple Datentypen mit "with .. as" elegant verwe
 
Hey,

folgendes Szenario: Ich habe mir eine ClientSocket Implementation geschrieben. Dazu habe ich erstmal eine TCustomSocket Klasse erstellt. Von dieser leite ich ein TStandardSocket, ein TSOCKS4Socket und ein TSOCKS5Socket ab.
In meinem Programm soll es nun eine Option geben, ob ein Proxy verwendet werden soll. Wie relalisiere ich Codetechnisch diesen Abschnitt möglichst elegant?

Delphi-Quellcode:
var
  Socket: TCustomSocket;
begin
  if dwProxy = 0 then
  begin
    with Socket as TStandardSocket do
    begin
      Create;
      try
        // Viel Code
      finally
        Free;
      end;
    end;
  end;
  if dwProxy = 1 then
  begin
    with Socket as TSOCKES4Socket do
    begin
      Create;
      try
        // Viel Code
      finally
        Free;
      end;
    end;
  end;
  // ...
end;
Der Code zwischen dem Create und Free bleibt ja praktisch gleich bis auf eine winzige Änderung am Anfang, weil das ProxySocket halt noch die Adresse des Proxys und dessen Port benötigt.
Gibt ja für Variablen sowas wie die Kennung als absolute. Wenn es sowas auch dymnamisch geben würde, also dass bei dwProxy = 0 Socket = absoulte SOCKS4Proxy ist.

Gruß

OregonGhost 31. Jan 2008 11:24

Re: Muktiple Datentypen mit "with .. as" elegant v
 
Kannst du nicht einfach dein Socket erzeugen und anschließend über Methoden und Eigenschaften der Basisklasse darauf zugreifen? Setzt natürlich voraus, dass so gut wie alles, was mit den Sockets gemacht werden muss, sich nur in der Implementierung und nicht im Interface unterscheidet. Das Buzzword "Factory" kommt mir da in den Kopf. Wenn einer der Sockets zusätzliche Informationen benötigt, die die anderen nicht kennen, kannst du diese ja auch als Konstruktorparameter übergeben. Also grundsätzlich, wie auch immer du es genau machst, Pseudocode:
Delphi-Quellcode:
var socket: TCustomSocket;

socket := SocketFactory.CreateSocket(proxyType);

try
// ... tue alles mit socket, was für alle gemeinsam ist
finally
  socket.Free;
end

Zacherl 31. Jan 2008 11:54

Re: Muktiple Datentypen mit "with .. as" elegant v
 
Stimmt das wäre eine Idee .. ich könnte auch einfach nur zum Createn und für den Zugriff auf die ProxyPort und ProxyType Eigenschaften nach TSOCKS5Socket typecasten und den Rest alles mit
Delphi-Quellcode:
with Socket as TStandardSocket do
erledigen. Auf das Einfachste kommt man meistens nicht :wall: Vielen Dank ..


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