2017-05-09 1 views
-3

Neuer Programmierer hier, ich habe mich gerade eine Weile darüber gewundert. Werfen Sie einen Blick auf diese zum Beispiel, was ist der Unterschied zwischen diesen:Zurückgeben von Funktionen vs. void Funktionen Einstellen von Variablen

static void Main(string[] args) 
{ 
    Program obj = new Program(); 
    Console.WriteLine(Convert.ToString(obj.Add())); 
} 
int Add() 
{ 
    return 1 + 1; 
} 

und

int Sum; 
static void Main(string[] args) 
{ 
    Console.WriteLine(Convert.ToString(Sum)); 
} 

void Add() 
{ 
    Sum = 1+1; 
} 

Antwort

1

Der erste Fall führt die Methode Add und druckt den Rückgabewert 2 an die Konsole.

Der zweite Fall wird nicht kompiliert, da Sum eine Klassenvariable ist und Ihnen ein Objektverweis wie im ersten Fall fehlt, um darauf zuzugreifen.

Wenn Sie Sumstatic dann Main arbeiten und drucken einfach der Standardwert von Sum die 0 ist machen würde. Da rufst du nie die Add Methode an.

Für den Unterschied der beiden Add() Methoden:
Der zweite Fall verwendet eine Klassenvariable und manipuliert es. Es muss so aufgerufen werden, dass sich der Wert Sum ändert.

Der erste Fall verwendet nur eine lokale Berechnung und ändert nichts innerhalb der Klasse. Es gibt einfach das Ergebnis einer Berechnung

EDIT:

Was wäre der Unterschied zwischen den beiden, was bevorzugt wird?

Es hängt stark davon ab, was Sie vorhaben. Wenn das einzige, was Sie interessiert, das Ergebnis von 1+1 ist und Sie dieses Ergebnis in einer Methode wie der Main verwenden müssen, dann verwenden Sie den ersten Fall.

Wenn die Variable ein signifikantes Merkmal der Klasse wie folgt dar:

public class BillsToPay 
{ 
    public int Sum; 

    List<int> Bills = new List<int>() {3,5,6,7}; 

    public void CalculateAllBills() 
    { 
     foreach (var bill in Bills) 
     { 
      Sum = Sum + bill; 
     } 
    } 
} 

Dann würden Sie eine Methode, die die Klassenvariable Sum manipuliert und aktualisiert seinen Zustand. so kommt die zweite Version ins Spiel. Aber es ist immer eine Mischung aus Geschmack und Absicht, wie man sich einem bestimmten Problem nähert.

Kleines Testprogramm:

static void Main(string[] args) 
{  
    BillsToPay btp = new BillsToPay();  
    btp.CalculateAllBills();   
    Console.WriteLine(Convert.ToString(btp.Sum));  
} 
+0

ich sehe. Also das: ' int Sum; static void Haupt (string [] args) { void Add(); Console.WriteLine (Convert.ToString (Summe)); } void Add() { Summe = 1 + 1; } ' Sollte 2 zurückgeben? Entschuldige dich für die ziemlich dumme Frage –

+0

@MatthysFourie Ich schrieb meine Antwort um. –

+0

Ah ja, ich habe den Code einfach in den Editor geschrieben, mein Compiler hätte das lesen sollen. Eine weitere Frage, wie funktioniert Code in Kommentaren, wenn Sie überhaupt können? Danke für die Hilfe übrigens. –

Verwandte Themen