2016-12-05 3 views
-1

Bit einer komplizierten Frage, ich entschuldige mich, wenn es etwas Dummes ist, das ich verpasst habe. Ich habe viele Lösungen ausprobiert und sie auf eine Art und Weise gelöst, aber die Referenznummer innerhalb des Kunden erhöht die CSV-Datei nicht.Referenznummer wird nicht von Factory erhöht? - Using singleton Logger kann nicht Referenznummer

Dies ist die anfängliche Referenzzahl gehalten wird von der Fabrik verwendet wird ...

abstract class ReferenceNo 
{ 
    static protected int _refNo; 

    static public int ReferenceNumber 
    { 
     get 
     { 
      return _refNo; 
     } 
    } 
} 

Diese Factory ist der die Bezugszahl inkrementieren soll ...

class ReferenceNoFactory 
{ 
    static private int lastbookingrefno = 0; // Last used booking reference number. 
    static private int lastcustomerrefno = 0; // Last used customer reference number. 

    static public ReferenceNo FactoryMethod(string type) 
    { 
     if (type == "Booking") 
     { 
      lastbookingrefno++; // Create new booking reference number. 
      return new Booking(lastbookingrefno); 

     } 
     else if (type == "Customer") 
     { 
      lastcustomerrefno++; // Create a new customer reference number. 
      return new Customer(lastcustomerrefno); 
     } 
     else 
      return null; // Default, only a booking or customer reference number can be created. 
         // Nothing else should be returned, or null. 
    } 

} 

Dies ist der erste Teil der Customer-Klasse, die die Referenznummer erhält und eine Logger-Instanz verwendet, um sie in der .csv-Datei zu speichern ...

Und das ist der Logger, die der Dateipfad usw. hält ...

private static CustomerLogger instance; 

    private CustomerLogger() {} 

    public static CustomerLogger Instance 
    { 
     get 
     { 
      if (instance == null) 
      { 
       instance = new CustomerLogger(); 
      } 
      return instance; 
     } 
    } 

    public void log(int custnum, string firstname, string lastname, string address) 
    { 
     System.IO.File.AppendAllText("F:\\Software Dev 2\\Coursework 2\\Mia-CourseWork2\\Customers.csv", "CustRefNum," + custnum + ",FirstName, " + firstname + ",LastName," + lastname + ",Address," + address + "\n"); 
    } 

Die Referenznummer bleibt 1? ... Output

Antwort

0

Ich habe Probleme, Ihr Problem zu replizieren, lief ich dein Beispiel :

static void Main(string[] args) 
{ 
    Customer.LogFile(); 
    Customer.LogFile(); 
} 

ich den Logger geändert einfach zu sein:

public void log(int custnum, string firstname, string lastname, string address) 
{ 
    Console.WriteLine(Customer.ReferenceNumber); 
} 

bekomme ich folgende Ausgabe:

Ich würde vorschlagen, dass Sie einen konventionelleren Ansatz für Ihre benutzerdefinierte Klasse nehmen und haben einfach nicht-statische Eigenschaften. Wenn Sie die letzte Buchungsreferenz und die letzte Kundenreferenz speichern möchten, schlage ich vor, dass Sie eine Eigenschaft für die ReferenceNoFactory verwenden.

+0

Verständlicherweise verwenden Sie die Methode zweimal, obwohl sie nur einmal wiederholt verwendet werden sollte? Es ist ein Urlaubsbuchungs-Programm, so dass die Daten in der gleichen .csv-Datei gespeichert werden sollten, wobei nur die Referenz inkrementiert wird ...? –

+0

@ Mia.B kannst du deiner Frage ein Anwendungsbeispiel hinzufügen, damit ich sehen kann, was du meinst? – openshac

+0

Entschuldigung ja es funktioniert irgendwie, es erhöht, wenn ich 2 Kunden in der gleichen Programmlaufzeit erstellen. Ich denke, ich brauche nur eine Art von Validierung für das Programm, um zu sehen, ob die Referenznummer bereits in der Datei ist, wenn das Sinn macht? –

Verwandte Themen