C # Überladungsrückgabetyp - empfohlener Ansatz

7

Ich habe eine Situation, in der ich nur möchte, dass der Rückgabetyp für eine Methodenüberladung anders ist, aber Sie können dies nicht in C # tun.

Was ist der beste Weg, damit umzugehen? Ist die Tatsache, dass ich das brauche, meine Programmstruktur fehlerhaft?

Angesichts der Tatsache, dass dies in C # unmöglich ist, was ist der empfohlene Ansatz?

    
richard 23.05.2013, 19:32
quelle

4 Antworten

18

Normalerweise geben Sie den Methoden einfach verschiedene Namen.

Ein Beispiel dafür ist IDataReader mit GetInt32 , GetInt64 etc.

Um ehrlich zu sein, glaube ich, dass dies normalerweise deutlicher macht, was Sie ohnehin tun wollen - besonders wenn Sie dann eine überladene Methode mit dem Ergebnis aufrufen:

%Vor%     
Jon Skeet 23.05.2013, 19:34
quelle
7
  

Angesichts der Tatsache, dass dies in C # unmöglich ist, was ist der empfohlene Ansatz?

Es hängt davon ab, warum Sie das brauchen.

Der häufigste Ansatz besteht darin, einfach einen anderen Namen zu verwenden. Das Framework tut dies in vielen Fällen, wie zum Beispiel die Konvertierungsklasse .

Wenn Sie mehrere Typen unterstützen möchten, können Sie dies über generische Methoden tun:

%Vor%

Der generische Methodenansatz ist für Repostories üblich, da es normalerweise einen Typ der Basisklasse "Entity" gibt.

    
Reed Copsey 23.05.2013 19:33
quelle
2

Sie können einen anderen Parameter haben, der den Rückgabetyp angibt.

%Vor%     
ispiro 23.05.2013 19:39
quelle
1

Ich habe bereits eine Antwort gepostet, aber hier ist ein anderer Weg: Verwenden Sie object s.

%Vor%

Und wirf das Ergebnis auf den passenden Typ.

    
ispiro 23.05.2013 20:55
quelle