В моем коде мне было предложено вернуть объект в мой метод 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;
}
}
}
Когда кто-то говорит "вернуть объект" в С#, они обычно означают: "верните ссылку на то, что я хочу". К счастью, классы всегда хранятся (по крайней мере, для целей этого обсуждения) в качестве ссылок уже, так что это действительно просто.
Код будет почти идентичен вашему методу 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
так, чтобы
cList
- это массив клиентов, и вы можете вытащить их ссылки.И, наконец, несколько полезных советов:
Customer
)get
методы для данных необычно в С#, как правило, они просто подвергаются через свойство Похоже, что он будет очень похож на ваш метод 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
Используя ваш код...
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
;
findCustomer
вас уже есть, поскольку оба получают идентификатор. Можете ли вы дать нам больше информации о том, что метод должен делать?findMethod
переименуйте его вgetCustomer
в цикле, вернитеcList[x]
ad вместоreturn false
используйтеreturn null
.