Ich habe heute etwas mit C # gefunden, an das ich vorher nicht gedacht hatte. Ich habe zwei Methoden in meiner Klasse, eine eine Überlastung der anderen. Sie werden wie folgt erklärt:
%Vor%In meinem Code habe ich versucht, den ersten wie folgt zu nennen:
%Vor%... erwarte, dass es die erste Überladung aufruft. Nun, es hieß die zweite Überladung. Die einzige Möglichkeit, die erste Methode in diesem Fall aufzurufen, besteht darin, ein string [] - Objekt wie folgt manuell zu übergeben:
%Vor%Dieses Verhalten verwirrt mich nicht, weil ich weiß, dass der Compiler aufgrund meiner Parameter nicht sagen kann, welche Methode ich eigentlich aufrufen wollte. Aber ich war nicht vorsichtig, das hätte in meinem Code unbemerkt bleiben können. Es scheint, als ob Microsoft den Compiler einen Fehler auslösen lassen sollte, wenn eine Situation wie oben aufgetreten ist. Hat jemand darüber irgendwelche Gedanken? Gibt es eine andere Möglichkeit, die erste Überladung als die von mir gepostete "Lösung" aufzurufen?
Persönlich würde ich es so machen:
%Vor% Die Leute verlieben sich manchmal in Überladung, und wenn Sie das mit einer Liebe für das params
-Schlüsselwort kombinieren, erhöhen Sie nur die Verwirrungsebene für den, der schließlich Ihren Code übernehmen muss.
Es sieht so aus, als gäbe es keinen anderen Weg.
Sie finden eine Erklärung zu diesem Verhalten in C # spec Ссылка und hier Ссылка (Absatz 2)
Ein Parameter-Array entspricht genau einem Wert-Parameter (§ 17.5.1.1) desselben Typs.
und
Die erweiterte Form einer Methode ist nur verfügbar, wenn die normale Form der Methode dies nicht ist anwendbar und nur dann, wenn eine Methode mit der gleichen Signatur wie das erweiterte Formular nicht bereits vorhanden ist im selben Typ deklariert
Ja, ich stimme zu, dass es wahrscheinlich eine Warnung sein sollte, wenn die Verwendung von Array-Arrays mit variabler Länge eine mehrdeutige Überladung verursacht - es ist sehr viel ein Randfall, und die Leute wollen fast sicher nicht solche Situationen erzeugen.
Ich weiß auch nicht anders, als dass Sie gepostet haben, um die Anrufauflösung zu vermeiden, die auftritt - anders als zu vermeiden, es überhaupt zu tun, was ich sehr empfehlen würde!
Sie können Params nicht verwenden und explizit mit Ihren Signaturen arbeiten.
%Vor%Tags und Links c# overloading params