Возврат Экземпляра Объекта - PullRequest
0 голосов
/ 05 октября 2018

В моем коде мне было приказано вернуть объект в моем методе GetCustomer в моем классе CustomerManager из класса Customer.Я новичок в объектно-ориентированном программировании, поэтому у меня нет идей, как это сделать.Может кто-нибудь мне помочь?

Класс менеджера по работе с клиентами

public class customerManager
{
    private static int currentCusNo;
    private int maxCustomers;
    private int numCustomers;
    customer[] cList;

    public customerManager(int maxCust, int seed)
    {
        currentCusNo = seed;
        maxCustomers = maxCust;
        numCustomers = 0;
        cList = new customer[maxCustomers];
    }
    public bool addcustomers(string fN, string lN, string ph)
    {
        if (numCustomers > maxCustomers) return false;

        customer m = new customer(fN, lN, ph, currentCusNo);
        currentCusNo++;
        cList[numCustomers] = m;
        numCustomers++;
        return true;

    }
    public int findCustomer(int cusID)
    {
        for (int x = 0; x < numCustomers; x++)
        {
            if (cList[x].getID() == cusID)
            {
                return x;
            }
        }
        return -1;
    }
    public bool customerExist(int cusID)
    {
        for (int x = 0; x < numCustomers; x++)
        {
            if (cList[x].getID() == cusID)
            {
                return true;
            }
        }
        return false;
    }
    public string customerlist()
    {
        string y = " ";

        for (int x = 0; x < numCustomers; x++)
        {

            y += "\nFirst Name: " + cList[x].getFirstName() + "\nLast name: " + cList[x].getLasttName() + "\nCustomer ID: " + cList[x].getID();

        }

        return y;
    }
    public customer GetCustomer(int cID)
    {
        for (int x = 0; x < numCustomers; x++)
        {
        }
    }
}

}

Класс по клиенту

public class customer
{
    private int customerID;
    private string firstName;
    private string lastName;
    private string phone;

    public customer(string fN, string lN, string ph, int cId)
    {
        customerID = cId;
        firstName = fN;
        lastName = lN;
        phone = ph;
    }
    public int getID() { return customerID; }
    public string getFirstName() { return firstName; }
    public string getLasttName() { return lastName; }
    public string getPhone() { return phone; }

    public string toString()
    {
        string s = "";

        s +="First Name: " + firstName + "\nLast Name: " + lastName + "\nPhone: " + phone + "\nCustomer ID: " + customerID;

        return s;
    }
}

}

Ответы [ 3 ]

0 голосов
/ 05 октября 2018

Когда кто-то говорит «вернуть объект» в C #, он обычно означает: «вернуть ссылку на то, что я хочу».К счастью, классы всегда хранятся (по крайней мере, для целей данного обсуждения) как ссылки, так что это действительно просто.

Код будет почти идентичен вашему findCustomer методу, но вместо того, чтобы возвращать индекс клиента, он просто вернет ссылку на клиента.

public customer GetCustomer(int cID)
{
    for (int x = 0; x < numCustomers; x++)
    {
        customer testCustomer = cList[x];
        if (testCustomer.getID() == cusID)
        {
            return testCustomer;
        }
    }
    return null;
}

Я явно поставил *Переменная 1007 *, так что

  1. Вы увидите, что cList - это массив клиентов, и вы можете извлечь их ссылки.
  2. Несколько эффективнее не получить товариз массива дважды.Если бы это не было постоянным временем, повышение эффективности было бы более важным.

И, наконец, несколько полезных советов:

  • Классы в C # должны быть PascalCase (Customer)
  • Многократные возвраты должны выполняться с осторожностью, так как они могут вводить в заблуждение при чтении
  • Использование ручных get методов для данных необычно в C #, обычно онитолько выставляется через свойства
0 голосов
/ 05 октября 2018

Похоже, он будет очень похож на ваш findCustomer метод, только вместо того, чтобы возвращать int, вы вернете фактический cutomer объект.Если бы я следовал той же схеме, что и остальная часть вашего класса, это выглядело бы примерно так:

    public customer GetCustomer(int cID)
    {
       for (int x = 0; x < numCustomers; x++)
       {
          if (cList[x].getID() == cID)
          {
             return cList[x];
          }
       }
       return null;
    }

Однако следует сказать, что если вы используете System.Linq, то тот же метод может бытьсделано только одной строкой:

    public customer GetCustomer(int cID)
    {
       return cList.Where(x => x.getID() == cID).SingleOrDefault();
    }

Приветствия
JM

0 голосов
/ 05 октября 2018

Используя ваш код ...

public customer GetCustomer(int cID)
{
    int index = findCustomer(cID);

    if (index != 1)
        return cList[index];

    return null;
}

Найдите индекс cID, который вы хотите, и верните элемент списка в этом индексе или ноль, если вы не найдете.

Или ...

Скопируйте и вставьте код findCustomer, изменив return x; на return cList[x]; и -1 на null;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...