AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Typ-Kompatibilitäts-Regeln bei Generics mit overloads
Thema durchsuchen
Ansicht
Themen-Optionen

Typ-Kompatibilitäts-Regeln bei Generics mit overloads

Ein Thema von DenkDirNix · begonnen am 11. Dez 2024 · letzter Beitrag vom 11. Dez 2024
 
DenkDirNix

Registriert seit: 13. Dez 2018
71 Beiträge
 
Delphi 11 Alexandria
 
#1

Typ-Kompatibilitäts-Regeln bei Generics mit overloads

  Alt 11. Dez 2024, 18:29
Dieses Verhalten (Aufruf {2} im Code) hat mich (nach etlichen Programmier-Stunden in der Annahme dass es anders wäre) kalt überrascht:
Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

type
  TMyclass = class
    class procedure Send ( v: word ); overload;
    class procedure Send<T>( v: T ); overload;
  end;

var
  b: byte = 255;
  w: word = 256;


class procedure TMyclass.Send( v: word );
begin
  writeln( 'Send' );
end;

class procedure TMyclass.Send<T>( v: T );
begin
  writeln( 'Send<T>' );
end;


begin
{1} TMyclass.Send<byte>( b ); // ruft Send<T> auf, okay
{2} TMyclass.Send ( b ); // ruft Send<T> auf, ??
{3} TMyclass.Send<word>( w ); // ruft Send<T> auf naja
{4} TMyclass.Send ( w ); // ruft Send auf, okay
ReadLn
end.
Die Typ-Kompatibilität der generischen Methode Send<T> wird bei der Auswahl der passenden overload-Methode für Aufruf {2} als stärker gewichtet als die Kompatibilität des Aufruf-Parameter-Typs "byte" zum formalen Parameter-Typ "word" des nicht-generischen Send.
Zumindest das Fehlen des konkreten Typs <byte> sollte doch den Compiler dazu bewegen, nur die nicht-generischen overloads in Betracht zu ziehen. Hätte ich so gedacht...
  Mit Zitat antworten Zitat
 


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 03:28 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