Возврат Экземпляра Объекта

2

В моем коде мне было предложено вернуть объект в мой метод 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;
    }
}

}

  • 2
    Я не вижу различий в методе, который вы хотите реализовать, и в findCustomer вас уже есть, поскольку оба получают идентификатор. Можете ли вы дать нам больше информации о том, что метод должен делать?
  • 1
    Скопируйте метод findMethod переименуйте его в getCustomer в цикле, верните cList[x] ad вместо return false используйте return null .
Теги:
object

3 ответа

2

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

Код будет почти идентичен вашему методу 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;
}

Я явно testCustomer переменную testCustomer так, чтобы

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

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

  • Классы в С# должны быть PascalCase (Customer)
  • Несколько возвратов должны выполняться с осторожностью, поскольку они могут сбивать с толку читать
  • Имея ручные get методы для данных необычно в С#, как правило, они просто подвергаются через свойство
  • 0
    Код работает так, как задумано сейчас. Большое спасибо за полезные советы и объяснение того, как работает код. Я буду помнить их в следующий раз!
0

Похоже, что он будет очень похож на ваш метод findCustomer, но только вместо того, чтобы возвращать int, вы findCustomer фактический объект- 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

  • 1
    Вы знаете, что ваш код с LINQ не компилируется? Убедитесь, что вы просматриваете, что делает на будущее ...
  • 1
    хорошо поймать Кевина. Исправленный.
Показать ещё 2 комментария
0

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

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

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

    return null;
}

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

Или же...

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню