2017-07-27 2 views
0

von meinem Wissen zu funktionieren ich, dass es gefunden haben zwei Möglichkeiten, Parameter an Funktionen vorbei, - als Parameter in Funktionssignatur oder - sammeln Sie die Parameter im ObjektGabe von Parametern

Beispiel: wenn ich eine Summenfunktion

public int Sum(parameters) 

ich muss wissen, was die besser ist, die Parameter zu übergeben, ist es so

public int Sum(int x, int y) { 
    return x+y; 
} 

oder so?

public int Sum(Number no) { 
    return no.X + no.Y; 
} 

public class Number { 
    public int X {get;set;} 
    public int Y {get;set;} 
} 
+1

Es macht überhaupt keinen Unterschied. Die zweite Option, die Sie anzeigen, heißt Kapselung und wird zum Bündeln von Daten in ein einzelnes Objekt verwendet. Verschiedene Anwendungsfälle für beide. – nbokmans

Antwort

1

Es gibt keinen signifikanten Unterschied. Die zweite Methode, die Dinge in einem Objekt hat, wird Kapselung genannt. Das Einkapseln ist normalerweise besser, wenn Sie viele Parameter oder einen allgemeinen Satz von Parametern haben, die an andere Methoden weitergegeben werden. Es gibt einen sehr geringen Verarbeitungseinfluss auf die Verkapselung, aber es sollte Sie in keiner wahrnehmbaren Weise beeinträchtigen.

Wenn jede Variable separat ist, ist dies eher sinnvoll für kleinere Parameter und für Methoden, die diese Parameter nicht an andere Methoden weitergeben.

Am Ende, aber es liegt an Ihnen, was Sie verwenden. Wie ich bereits sagte, die Auswirkungen der Kapselung sind vernachlässigbar, aber es kann ein Problem sein, Klassen und Strukturen für alles zu definieren. Ich verwende im Allgemeinen Kapselung, wenn es eine Sammlung von Variablen gibt, die oft zusammen gefunden werden, die mehrere Methoden verwenden. Dann können bestimmte Methoden einfach Variablen ignorieren, die sie nicht benötigen.

Bonus Fact

Es gibt auch eine dritte Möglichkeit, Parameter vorbei, wenn Sie eine beliebige Anzahl von Dingen, eine Methode, um in der Lage akzeptieren wollen. Dies geschieht über das Schlüsselwort params für einen Parameter, der alle mitgelieferten Parameter übernimmt und in einem Array speichert. In Ihrem Summe Fall funktionieren würde, wie folgt:

public int Sum(params int[] args) //Accepts any number of int parameters 
{ 
    int result = 0; 
    for(int i = 0; i < args.Length; ++i) 
    { 
     result += args[i]; 
    } 
    return result; 
} 

die dann wie genannt werden:

Sum(1, 2); 
Sum(1, 2, 3, 4, 5, 6, 7, 8); 
or even 
Sum(1); 

params obwohl weniger Anwendungen haben dazu tendiert, und ich bin nicht sicher, der Verarbeitung Auswirkungen davon, aber es ist da, wenn du es brauchst.

0

Es hängt davon ab, welche Anforderungen Sie haben und wie viele Parameter Sie an die Funktion übergeben müssen. Wenn Sie jedoch viele Parameter übergeben möchten, sollten Sie die zweite Methode verwenden, indem Sie Eigenschaften erstellen. Es wäre einfach und effizient.

+0

Während der Unterschied vernachlässigbar ist, ist die Instanziierung neuer Objekte nie effizienter als die direkte Übergabe der Variablen. – nbokmans

+0

Bei wenigen Parametern sind Sie richtig. aber die Verwendung von Modellen ist einfach, wenn Sie es sicher schreiben möchten. –

0

Es hängt wirklich von der Komplexität Ihrer Funktion ab. In diesem Beispiel ist der bessere Ansatz der erste. Da Sie keine neuen Objekte erstellen müssen, um es zusammenzufassen. Wenn Sie die Möglichkeit haben, die Rückgabe Ihrer Klasse zu korrigieren oder zu lesen, müssen Sie die zweite verwenden.

0

Eigentlich sollten Sie entscheiden, welche Datenstruktur Ihre Anwendung haben soll und danach diese Strukturen in Methoden übernehmen. Es ist eine gute Regel, keine Strukturen zu erzeugen, in denen Sie keine Notwendigkeit haben. Manchmal können Sie bemerken, dass mehrere Parameter logische Verbindungen haben und immer (fast immer) in Methoden alle zusammen übergeben werden.In diesem Fall werde ich empfehlen, sie in Struktur

0

zu kapseln. Ich würde versuchen, immer die erste Wahl zu bevorzugen, wie aus der Methodensignatur klar ist, was es tatsächlich tut und gleichzeitig Sie sicher sind, dass Sie nur diese Methode weitergeben was ist eigentlich nötig.

Und auch wenn Sie sehen, dass Ihre Methode zu viele Parameter hat, kann es Warnsignal von schlechtem Design sein. Am Ende kann die zweite Wahl nur ein Hack sein, um einige Design-Probleme zu verbergen.

Verwandte Themen