Класс с несколькими объектами или списком - PullRequest
0 голосов
/ 26 августа 2018

Я новичок в ООП и C #, поэтому у меня есть вопрос, который потенциально может быть нубом.

Глядя на классы, весь код, который я вижу, требует жесткого кодирования имен объектов.Скажем, к примеру, мы не знаем, сколько Customers пользователь введет и как его зовут.Так как же это работает с созданием экземпляров класса?

Это тот случай, когда вы создадите только один класс клиентов как тип данных (с необходимыми методами) и сохраните их, скажем, в списке?Или класс может содержать несколько экземпляров объекта, но создавать их и динамически называть их по отношению к пользовательскому вводу?

Я не совсем понял, как класс работает с хранением записей в памяти и т. Д.

Ответы [ 4 ]

0 голосов
/ 26 августа 2018

Чтобы помочь вам понять класс в первую очередь.

Класс - это образец того, как будут выглядеть данные. Если бы вы строили дом, например, сначала делали чертежи. Эти отпечатки могут быть использованы для создания многих домов, которые выглядят одинаково. Различия в этих домах различаются в таких областях, как цвет, дерево, кирпич или винил, и если есть ковер или нет. Это всего лишь пример, но давайте превратим этот дом в класс (план), а затем сделаем несколько из этих домов действительными отдельными объектами; наконец, давайте обратимся ко всем из них в одном месте (используя список).

Сначала давайте определимся, каковы наши варианты домов, что выделяет их. Это цвет, внешний вид и с ковром или без. Здесь мы сделаем цвет string (текст) для простоты, внешний вид как enum (чтобы параметры были жестко заданы), а ковер или нет bool (правда или ложь).

Сначала давайте создадим enum, поскольку он отделен от класса, но используется внутри класса.

public enum Exterior { Brick, Vinyl, Wood }

Теперь давайте создадим класс (план).

public class House 
{
    public string Color { get; set; }
    public Exterior Exterior { get; set; }
    public bool HasCarpet { get; set; }
}

Теперь, когда у нас есть план, давайте на самом деле сделаем несколько домов. Когда мы делаем их, нам нужен способ найти их в памяти, чтобы мы присвоили их переменной. Давайте представим, что мы находимся в консольном приложении, и это первые несколько строк основного метода.

var house1 = new House();
var house2 = new House();
var house3 = new House();

Теперь у нас в памяти 3 отдельных дома, и мы можем добраться до любого из них, ссылаясь на house1, house2 или house3. Однако эти дома по-прежнему построены одинаково и, к сожалению, не имеют цвета (поскольку строка Color пуста), по умолчанию имеют значение Brick (поскольку первое перечисление - Brick) и не имеют ковра (поскольку значение по умолчанию для HasCarpet равно false).

Мы можем исправить это, ссылаясь на каждую ссылку на объект дома и назначая эти значения следующим образом ...

house1.Color = "Red";
house1.Exterior = Exterior.Wood;

Мы могли бы дать классам конструктор, для начала которого требовались эти значения в качестве параметров, или мы могли бы сделать это более простым способом (встроенный в синтаксис C #).

var house1 = new House()
             {
                 Color = "Red",
                 Exterior = Exterior.Wood
             };

Мы могли бы также дать ему ковер, но так как в этом доме его не будет, и по умолчанию он будет ложным, я оставил его.

Хорошо, допустим, у нас есть все 3 дома, построенные по нашей схеме. Давайте теперь сохраним их вместе в списке. Сначала нам нужно превратить List в объект и ссылаться на него.

var houses = new List<House>();

Теперь давайте добавим дома в список.

houses.Add(house1);
houses.Add(house2);
houses.Add(house3);

Теперь houses является ссылкой на все наши домашние объекты. Если мы хотим попасть в дом в списке, мы можем использовать индекс (начиная с 0) и получить это место в списке. Допустим, у house2 должен быть ковер, но мы хотим использовать список сейчас, чтобы ссылаться на него. Примечание. Существует довольно много способов ссылки на элементы в списке, этот элементарный.

houses[1].HasCarpet = true;

Я сделал это на своем телефоне, надеюсь, ошибок нет. Я намерен четко ответить на ваш вопрос, обучить и помочь вам лучше понять занятия.

0 голосов
/ 26 августа 2018

Храните клиентов в коллекции. Существует много разных типов коллекций. Вероятно, 2 самых популярных - List<T> и Dictionary<TKey, TValue>.

List<T>, где T - это тип (Customer в вашем случае):

List<Customer> customers = new List<Customer>();

Customer c = new Customer { Name = "My first customer" };
customers.Add(c);

c = new Customer { Name = "My second customer" };
customers.Add(c);

customers.Add(new Customer { Name = "My third customer" });

Доступ к клиенту в списке можно получить через нулевой индекс

Customer c = list[5]; // Get the 6th customer

Списки также могут быть перечислены:

foreach (Customer cust in customers) {
    Console.WriteLine(cust.Name);
}

Dictionary<TKey, TValue>: словари позволяют искать клиента по ключу, например, номер клиента.

Dictionary<string, Customer> customers = new Dictionary<string, Customer>();

Customer c = new Customer { Id = "C1", Name = "My first customer" };
customers.Add(c.Id, c); // The Id is used as key, the customer object as value.

Тогда вы можете вернуть его с

Customer c = customers["C1"];

Это вызывает исключение, если предоставленный ключ не существует. Чтобы избежать исключения, вы можете написать:

string id = "XX";
if (customers.TryGetValue(id, out Customer cust)) {
    Console.WriteLine(cust.Name);
} else {
    Console.WriteLine($"Customer '{id}' not found");
}
0 голосов
/ 26 августа 2018

Скорее всего, вы бы использовали IEnumerable<Customer>.Класс Customer в реальной жизни связан с базой данных.

При работе с базами данных на ум приходит Linq, который будет использовать IQueryable<Customer> (унаследовано от IEnumerable).По мере необходимости вы также можете использовать другие типы коллекций , такие как List<Customer>, Dictionary<...> и т. Д.

0 голосов
/ 26 августа 2018

Если вы будете перебирать объекты в какой-то момент, я бы использовал List.

Как уже упоминалось @wazz, вы должны хранить их в списке, например так:

List<Customer> customers = new List<Customer>();

Затем вы можете начать работать со списком, добавлять новые экземпляры, удалять и т. Д.

Более подробную информацию вы можете получить в документах .

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