Frage

Ich habe diese Frage für ein Gefühl ist eine Dose Würmer, aber ich werde auf jeden Fall fragen ...:)

Ich habe eine Methode:

private MembershipUser GetUserFromReader(SqlDataReader reader)

Und ich möchte Überlastung diese Methode mit einem anderen Rückgabetyp:

private User GetUserFromReader(SqlDataReader reader)

Aber der Compiler beschwert sich, dass die beiden Verfahren die gleiche Signatur haben.

Also, was ist der beste Weg, dies zu tun? Ich würde es vorziehen, nicht unnötig hinzufügen Parameter nur die Methodensignatur zu ändern.

Ich habe mit dem Gedanken gespielt, etwas zu tun wie:

private User GetUserFromReader(T reader)

Aber haben nicht wirklich die noch vollständig erforscht. Es scheint, wie ich eine machen müssen Bündel von Änderungen mit, wie ich mein Leser-Objekt verwenden.

Irgendwelche Ideen? Was ist die beste Praxis, wenn Sie zwei überlastet Methoden der gleichen Signatur?

Vielen Dank für die Unterstützung aus ...

War es hilfreich?

Lösung

Überlastung Warum das? Warum lassen Sie nicht nur die Methode sagen, was es tut, etwa so:

private MembershipUser GetMembershipUserFromReader(SqlDataReader reader)
private User GetUserFromReader(SqlDataReader reader)

Andere Tipps

Wenn Sie wirklich den Rückgabetyp zu differenzieren wollen, aber die gleiche Methode Signatur verwenden, können Sie Generika verwenden:

private T GetUserFromReader<T>(SqlDataReader reader)

Aber es ist viel einfacher, nur die Methoden zu benennen, wie in Luhmanns Antwort.

Ihre einzige wirkliche Optionen sind:

  1. Ändern Sie den Namen der Funktion
  2. Ändern Sie die Signatur der Funktion

Ich hasse banal sein, aber es nicht eine Möglichkeit, um die Beschränkung der Methoden allein durch Rückgabetyp unterscheiden.

Wenn einer der Überlastung in einer übergeordneten Klasse deklariert wird, dann können Sie das new Schlüsselwort zu „verstecken“ die höheren Methode von Anrufern verwenden, aber new (auf einer Elementdeklaration) wird das Böse in der Regel berücksichtigt.

Sie können nicht den Rückgabetyp auf einer Überlastung ändern. Wie wird der Compiler soll sagen, welche Sie verwenden möchten?

Was Sie tun sollten, ist eine gemeinsame übergeordnete Klasse von allem kehren Sie zurückkehren möchten, und dann einfach zurückgeben, was anwendbar ist.

Entweder das, oder die Methoden nennen anders, da sie deutlich verschiedene Dinge tun.

Die einfache Antwort ist, dass, so weit wie C # betrifft, so kann man nicht. Eine Überlastung durch Rückgabetyp ist erlaubt (I denkt ) von MSIL, aber nicht von C #.

Die einzige wirkliche Wahl (das heißt, ohne das Hinzufügen eines „Dummy“ Parameter), ist eine Methode GetMembershipUserFromReader und die anderen GetUserFromReader nennen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top