2016-12-05 14 views
-1

Немного сложного вопроса, извиняюсь, если это что-то глупое, что я пропустил. Я пробовал много решений и решал их в некотором смысле, но теперь ссылочный номер в Customer не будет увеличиваться в CSV-файле?Номер ссылки не будет увеличиваться с завода? - Использование singleton Logger не может ссылаться Номер ссылки

Это начальный номер ссылки проводится для использования на заводе ...

abstract class ReferenceNo 
{ 
    static protected int _refNo; 

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

Это завод, который должен увеличиваем номер ссылки ...

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. 
    } 

} 

Это первая часть класса Customer, которая получает ссылочный номер и использует экземпляр регистратора, чтобы сохранить его в файле .csv ...

class Customer : ReferenceNo 
{ 
    static private string FirstName; 
    static private string LastName; 
    static private string Address; 

    public Customer(int refNo) 
    { 
     ReferenceNo._refNo = refNo; 
    } 

    static public void LogFile() 
    { 
     ReferenceNoFactory.FactoryMethod("Customer"); 

     CustomerLogger firstlogger = CustomerLogger.Instance; 
     firstlogger.log(Customer.ReferenceNumber, Customer.firstname, Customer.lastname, Customer.address); 
    } 

И это регистратор, который держит путь файл и т.д. ...

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"); 
    } 

Референс номер остается 1? ... Output

ответ

0

У меня возникли проблемы тиражирование вашей проблемы, я побежал ваш пример :

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

Я изменил регистратор быть просто:

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

я получаю следующий результат:

Я хотел бы предложить вам принять более традиционный подход к пользовательскому классу и просто не-статические свойства. Если вы хотите сохранить последнюю ссылку на бронирование и последнюю ссылку на клиента, я предлагаю вам использовать свойство в ReferenceNoFactory.

+0

Понятно, что вы используете метод дважды, хотя он должен увеличиваться, только используя его один раз повторно? Это программа бронирования праздников, поэтому данные должны храниться в одном и том же файле .csv только с эталонным приращением ...? –

+0

@ Mia.B Вы можете добавить пример использования в свой вопрос, чтобы я мог понять, что вы имеете в виду? – openshac

+0

жаль, что это работает, оно увеличивается, если я создаю 2 клиента в одной и той же программе. Я думаю, мне просто нужна какая-то проверка для программы, чтобы узнать, находится ли ссылочный номер в файле, если это имеет смысл? –