AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Funktion überladen

Ein Thema von Pseudemys Nelsoni · begonnen am 15. Aug 2006 · letzter Beitrag vom 15. Aug 2006
Antwort Antwort
Seite 2 von 2     12
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#11

Re: Funktion überladen

  Alt 15. Aug 2006, 20:14
Zitat von Pseudemys Nelsoni:
Danke omata, bleibt wohl sonst nichts
Es gibt (zumindest in diesem Fall) eine viel einfachere Möglichkeit: Die zweite Methode ganz entfernen, da sie so unnötig wie ein Kropf ist .

Übrigens ist es unter .Net grundsätzlich möglich, überladene Methoden mit gleicher Signatur aber unterschiedlichem Rückgabewert zu deklarieren. Allerdings kenne ich keine Sprache außer CIL selbst, die dieses Feature unterstützt.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Der_Unwissende

Registriert seit: 13. Dez 2003
Ort: Berlin
1.756 Beiträge
 
#12

Re: Funktion überladen

  Alt 15. Aug 2006, 20:21
Zitat von Pseudemys Nelsoni:
Also soweit ich weiss, ging das in Delphi. Der Rückgabewert unterscheidet sich doch hm.... Wenn ich das Ergebnis einer Funktion einem string zuweise, müsste der compiler ja wissen, dass ich die meine mit String als Rückgabewert.
Da siehst du ein wenig was Falsch! Das ging auch unter Delphi nicht und sollte unter keiner anderen Sprache funktionieren. Stell dir einfach mal vor du hast eine Abstrakte Klasse AK und zwei Klassen A und B die von dieser Klasse Erben.
Jetzt überlädst du eine Methode, so grob in der Art:
Delphi-Quellcode:
function doFoo(s : String) : A;
begin
...
end;

function doFoo(s : String) : B;
begin
...
end;

procedure main;
var ak : AK;
begin
  ak := doFoo('Egal'); //<- Hier kann der Compiler nicht sagen welche Methode du möchtest
end;
Natürlich geht das noch in anderen Kombinationen, jedenfalls läufst du hier ganz schnell Gefahr einen Fehler zu übersehen und die falsche Methode aufzurufen, da sollte es jeder Compiler (jede Sprache) verbieten so etwas zuzulassen!

[ANMERKUNG NACH ROTEM KASTEN]
Ich möchte nochmal betonen, dass es keine Rechtfertigung gibt dies in einer Sprache zuzulassen, vollkommen unnötig!
[/ANMERKUNG NACH ROTEM KASTEN]
  Mit Zitat antworten Zitat
Oxmyx

Registriert seit: 21. Sep 2004
499 Beiträge
 
#13

Re: Funktion überladen

  Alt 15. Aug 2006, 21:59
Zitat von Pseudemys Nelsoni:
Also soweit ich weiss, ging das in Delphi. Der Rückgabewert unterscheidet sich doch hm.... Wenn ich das Ergebnis einer Funktion einem string zuweise, müsste der compiler ja wissen, dass ich die meine mit String als Rückgabewert.
Niemand zwingt mich, den Rückgabewert einer Funktion einer Variablen zuzuweisen. Was dann?
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#14

Re: Funktion überladen

  Alt 15. Aug 2006, 23:22
Zitat von Der_Unwissende:
[ANMERKUNG NACH ROTEM KASTEN]
Ich möchte nochmal betonen, dass es keine Rechtfertigung gibt dies in einer Sprache zuzulassen, vollkommen unnötig!
[/ANMERKUNG NACH ROTEM KASTEN]
In IL zu schreiben, _ist_ (so gut wie immer) unnötig . Zudem ist CIL insofern eine besondere Sprache, dass sie einfach nur die menschenlesbare Form des Inhaltes einer jeden .Net-Assembly, des IL-Bytecodes, ist. Der IL-"Compiler" hat überhaupt keine Entscheidungsfähigkeit über sinnvoll und nicht sinnvoll, da er einfach nur ein Übersetzer ist. Diese Entscheidung liegt bei den Compiler-Herstellern, und bei deren Produkten habe ich wie gesagt noch nie eine Verwendung dieser Eigenschaft der Common Language Runtime gesehen.

Code:
.method static void Main(string[] args)
   {
      .entrypoint
      .maxstack 1
      call int32 GimmeFive()
      call void [mscorlib]System.Console::WriteLine(int32)
      ret
   }
   
   .method static int32 GimmeFive()
   {
      .maxstack 1
      ldc.i4.5
      ret
   }
   
   .method static string GimmeFive()
   {
      .maxstack 1
      ldstr "Five"
      ret
   }
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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