Загрузка...

Задание на c#

Тема в разделе C# создана пользователем Ebaysher 26 авг 2021. 320 просмотров

  1. Ebaysher
    Ebaysher Автор темы 26 авг 2021 0 4 окт 2020
    Сделать класс описывающий контрагента, данный класс должен содержать общие атрибуты которые есть у физического и юридического лица, например идентификатор, БИН/ИИН, дата создания, автор создания, дата изменения, автор изменения и т. д.

    Наследовать от класса контрагента классы физическое лицо и юридическое лицо, содержащие дополнительные атрибуты присущие данному классу, например Фамилия, Имя, Отчество у физ. лица и Наименование у юр. лица.

    1. Организовать запись и чтение коллекции данных классов в/из файл(а).
    2. Организовать обработку некорректного формата входного файла.
    3. Сделать вывод списка физ лиц. Упорядочить список физ. лиц по Фамилии, Имени, Отчеству.
    4. Юр. лица могут иметь список контактных лиц, которые являются физ. лицами.
    5. Сделать вывод 5 записей из списка юр. лиц. Упорядочить список юр. лиц по количеству контактных лиц (по убыванию).
    Вопрос такой. Как можно реализовать дату изменения и пункт 1 ?
     
    26 авг 2021 Изменено
  2. PeaceDeath
    Переопределить сеттеры всех полей и при их использовании менять значений даты изменения на DateTime.Now
     
    1. Ebaysher Автор темы
      @PeaceDeath, а как его переопределить то? у меня ошибки в таком случае выходят как только не пробовал
    2. PeaceDeath
      Ebaysher, от такого количества информации о том, как ты пробовал и об ошибках, могу только послать на метанит. Часть статьи про дополнительную логику в сеттере
      https://metanit.com/sharp/tutorial/3.4.php
  3. undrcrxwn
    undrcrxwn 27 авг 2021 Заблокирован(а) 106 5 апр 2021
    погугли про (де-)сериализацию. пример бинарной сериализации:
    C#
    using (Stream stream = File.Open("data.bin", FileMode.Create))
    {
    BinaryFormatter bin = new BinaryFormatter();
    bin.Serialize(stream, myCollection);
    }
    источник: https://thedeveloperblog.com/serialize-list пример десериализации там же

    C#
    public DateTime LastUpdated;

    public int _MyProperty;
    public int MyProperty
    {
    get => _MyProperty;
    set
    {
    _MyProperty = value;
    LastUpdated = DateTime.Now;
    }
    }
    если считаешь, что в будущем захочешь расширить логику, срабатывающую после изменения свойств класса или заменить запоминание даты на что-нибудь другое, следует посмотреть в сторону интерфейса INotifyPropertyChanged

    в своём проекте с большим количеством свойств использую вот такой подход (применил к твоей задаче):

    Код
    public interface INotifyPropertyChangedAdvanced : INotifyPropertyChanged
    {
    public virtual void OnPropertyChanged(PropertyChangedEventHandler handler, [CallerMemberName] string propertyName = null)
    {
    handler?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public virtual bool Set<T>(ref T field, T value, PropertyChangedEventHandler handler, [CallerMemberName] string propertyName = null)
    {
    if (field != null && value != null && field.Equals(value))
    return false;
    field = value;
    OnPropertyChanged(handler, propertyName);
    return true;
    }
    }
    C#
    public class MyClass : INotifyPropertyChangedAdvanced
    {
    public event PropertyChangedEventHandler PropertyChanged;

    public DateTime LastUpdated;

    public int _MyProperty;
    public int MyProperty
    {
    get => _MyProperty;
    set => (this as INotifyPropertyChangedAdvanced)
    .Set(ref _MyProperty, value, PropertyChanged);
    }

    public MyClass()
    {
    PropertyChanged += (sender, e) =>
    {
    LastUpdated = DateTime.Now;
    // больше логики
    };
    }
    }

    MyClass instance = new MyClass();
    instance.PropertyChanged += (sender, e) =>
    {
    // ещё больше логики
    };
    такой подход позволяет минимизировать повторение кода, реагировать на изменение свойств класса извне, добавлять обёртки над процессом изменения состояния класса (например в случае с логгированием и т. п. вещами) :finger_up:
     
    27 авг 2021 Изменено
Загрузка...
Top