Was ist der Unterschied zwischen dem Erstellen einer Methode, die eine Liste oder ein Array empfängt?
Der Unterschied zwischen
void M(params int[] x)
und
void N(int[] x)
ist, dass M so genannt werden kann:
M(1, 2, 3)
oder so:
M(new int[] { 1, 2, 3 });
aber N darf nur auf die zweite Weise aufgerufen werden, nicht auf die erste .
Vielleicht hat es einen Einfluss auf die Leistung?
Die Auswirkung auf die Leistung besteht darin, dass unabhängig davon, ob Sie M
auf die erste oder die zweite Weise aufrufen, in beiden Fällen ein Array erstellt wird. Das Erstellen eines Arrays wirkt sich auf die Leistung aus, da es sowohl Zeit als auch Speicher benötigt. Denken Sie daran, dass die Auswirkungen auf die Leistung an den Leistungszielen gemessen werden sollten. Es ist unwahrscheinlich, dass die Kosten für die Erstellung eines zusätzlichen Arrays der entscheidende Faktor für Erfolg und Misserfolg auf dem Markt sind.
Ich verstehe oder sehe nicht ganz, auf welche Weise Sie die mit unbegrenzten Parametern bevorzugen würden.
Es ist rein und vollständig eine Annehmlichkeit für den Autor des Codes, der die Methode aufruft; es ist einfach kürzer und einfacher zu schreiben
M(1, 2, 3);
anstatt zu schreiben
M(new int[] { 1, 2, 3 });
Es werden nur ein paar Tastenanschläge auf der Anruferseite gespeichert. Das ist alles.
Einige Fragen, die Sie nicht gestellt haben, die Sie aber vielleicht gerne beantworten möchten:
Wie heißt diese Funktion?
Methoden, mit denen eine variable Anzahl von Argumenten auf der Aufruferseite übergeben werden kann, werden als variadic bezeichnet . Mit Params-Methoden implementiert C # verschiedene Methoden.
Wie funktioniert die Überlastungsauflösung mit einer variadischen Methode?
Bei einem Problem mit der Überlastungsauflösung berücksichtigt C # sowohl das "normale" als auch das "erweiterte" Formular, und das "normale" Formular gewinnt immer, wenn beide zutreffen. Betrachten Sie zum Beispiel Folgendes:
void P(params object[] x){}
und wir haben einen Anruf
P(null);
Es gibt zwei anwendbare Möglichkeiten. In "normaler" Form rufen wir P
eine Nullreferenz für das Array auf und übergeben sie. In "erweiterter" Form nennen wir P(new object[] { null })
. In diesem Fall gewinnt die normale Form. Wenn wir einen Anruf hatten, P(null, null)
ist das normale Formular nicht anwendbar und das erweiterte Formular gewinnt standardmäßig.
Herausforderung : Nehmen wir an, wir haben var s = new[] { "hello" };
einen Anruf P(s);
. Beschreiben Sie, was an der Anrufstelle passiert und warum. Sie könnten überrascht sein!
Herausforderung : Angenommen, wir haben beide void P(object x){}
und void P(params object[] x){}
. Was macht P(null)
und warum?
Herausforderung : Angenommen, wir haben beide void M(string x){}
und void M(params string[] x){}
. Was macht M(null)
und warum? Wie unterscheidet sich das vom vorherigen Fall?