2016-05-03 7 views
-2

Ich bin mit C# und Visual Studio 2015C# Klasse Parameter mit Klasse Objektparametern

Ich habe zwei Klassen Bankkonto und Geldbörse. Die Wallet-Klasse verfügt über eine Übertragungsmethode, die eine Instanz von BankAccount aufruft. In meinem Formularcode, wenn ich diese Parameter sende, zieht er jedoch keine Mittel aus den Quell- und Zielbilanzen ab.

Übertragungsmethode:

public void TransferFund(BankAccount source, BankAccount destination, double amount) 
{ 
    double Source = source.Balance; 
    double Destination = destination.Balance; 

    if (Source > amount) 
    { 

     Source -= amount; 
     Destination += amount; 

    } 
    else 
    { 
     throw new ArgumentException("Insufficient funds for transfer."); 
    } 

} 

auf Formular-Schaltfläche klicken:

   BankAccount from = lbTransferFrom.SelectedItem as BankAccount; 
       BankAccount to = lbTransferFrom.SelectedItem as BankAccount; 

       Wallet wall = new Wallet(); 
       double amount = Convert.ToDouble(tbAmount.Text); 
       wall.TransferFund(from, to, amount); 

Frage: Wie erhalte ich die Quell- und Zielobjekte, um tatsächlich die Salden zu ändern, wie es sollte?

+2

'Wallet wall = null;' Es ist Ihre Null-Referenz-Ausnahme –

+0

Haben Sie nicht nur eine Frage auf den genau gleichen Code? Und noch mehr, gestern? Warum habe ich das Gefühl, dass Sie jemanden suchen, der den ganzen Code für Sie schreibt? – jitendragarg

+0

jitendra garg: Ich lerne und das sind die Aspekte, die ich nicht kenne. Wenn man bedenkt, dass 90% meines tatsächlichen Codes von mir stammen, würde ich sicherlich sagen, dass ich es nicht bin. Ich bin auch in der Lage, diese erlernten Dinge zu übernehmen und sie in anderen Lernprojekten anzuwenden. – Thisone

Antwort

2

Diese beiden Linien

double Source = source.Balance; 
double Destination = destination.Balance; 

sind Kopieren der Wert .Balance zu einer Variablen. Im Folgenden ändern Sie dann den Wert dieser Kopien des Saldos, aber Sie werden nie den Saldo der einzelnen Konten neu zuweisen. Anstatt die Werte einfach zu kopieren, geben Sie

ein.

In C# können Sie Werte in Buckets teilen. Werttypen und Verweistypen Immer wenn Sie eine referenzierte typisierte Variable übergeben, wird jede Zuweisung oder andere Zustandsänderung von allen Referenzen ("Variablen") auf dasselbe Objekt reflektiert. Wenn Sie Werttypen (die einfachsten Typen und alle Strukturen) jedes Mal verwenden, wenn Sie eine Variable einer anderen zuweisen oder als Parameter übergeben, kopieren Sie den Wert und übergeben die Kopie mit. Alle Änderungen an der Kopie spiegeln sich nur in dieser Kopie wider, und Sie werden oft feststellen, dass Werttypen tatsächlich unveränderbar sind. In diesem Fall erstellen die beiden Zuweisungen double Source = source.Balance und Source -= amount eine Kopie und weisen diese neu erstellte Kopie der Source Variablen

zu

Alles was gesagt wird, ich erwarte, dass dies ein lustiges Projekt ist und nicht für die Produktion. Wenn Sie nicht brauchen Sie einige Transaktionslogik und ein passenderes Modell eines Kontos

+0

Ich denke auch, es ist nur ein Lernprojekt, aber wenn es nicht ist, dann würde ich auch hinzufügen, dass jemand ihren Fuß hinstellen sollte und klar sein sollte, dass man Bankkonten nicht als "doppeltes" Feld modellieren sollte, sondern als ein Hauptbuch von zeitgestempelten Transaktionen (und Modellmonatsbeträgen als Ints/Dezimalzahlen, nicht als Floats) – kai

Verwandte Themen