Сделать класс описывающий контрагента, данный класс должен содержать общие атрибуты которые есть у физического и юридического лица, например идентификатор, БИН/ИИН, дата создания, автор создания, дата изменения, автор изменения и т. д. Наследовать от класса контрагента классы физическое лицо и юридическое лицо, содержащие дополнительные атрибуты присущие данному классу, например Фамилия, Имя, Отчество у физ. лица и Наименование у юр. лица. Организовать запись и чтение коллекции данных классов в/из файл(а). Организовать обработку некорректного формата входного файла. Сделать вывод списка физ лиц. Упорядочить список физ. лиц по Фамилии, Имени, Отчеству. Юр. лица могут иметь список контактных лиц, которые являются физ. лицами. Сделать вывод 5 записей из списка юр. лиц. Упорядочить список юр. лиц по количеству контактных лиц (по убыванию). Вопрос такой. Как можно реализовать дату изменения и пункт 1 ?
Переопределить сеттеры всех полей и при их использовании менять значений даты изменения на DateTime.Now
@PeaceDeath, а как его переопределить то? у меня ошибки в таком случае выходят как только не пробовал
Ebaysher, от такого количества информации о том, как ты пробовал и об ошибках, могу только послать на метанит. Часть статьи про дополнительную логику в сеттере https://metanit.com/sharp/tutorial/3.4.php
погугли про (де-)сериализацию. пример бинарной сериализации: using (Stream stream = File.Open("data.bin", FileMode.Create)) { BinaryFormatter bin = new BinaryFormatter(); bin.Serialize(stream, myCollection); } C# using (Stream stream = File.Open("data.bin", FileMode.Create)) { BinaryFormatter bin = new BinaryFormatter(); bin.Serialize(stream, myCollection); } источник: https://thedeveloperblog.com/serialize-list пример десериализации там же public DateTime LastUpdated; public int _MyProperty; public int MyProperty { get => _MyProperty; set { _MyProperty = value; LastUpdated = DateTime.Now; } } C# public DateTime LastUpdated; public int _MyProperty; public int MyProperty { get => _MyProperty; set { _MyProperty = value; LastUpdated = DateTime.Now; } } если считаешь, что в будущем захочешь расширить логику, срабатывающую после изменения свойств класса или заменить запоминание даты на что-нибудь другое, следует посмотреть в сторону интерфейса INotifyPropertyChanged в своём проекте с большим количеством свойств использую вот такой подход (применил к твоей задаче): INotifyPropertyChangedAdvanced 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; } } Код 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; } } MyClass.cs 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) => { // ещё больше логики }; 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) => { // ещё больше логики }; такой подход позволяет минимизировать повторение кода, реагировать на изменение свойств класса извне, добавлять обёртки над процессом изменения состояния класса (например в случае с логгированием и т. п. вещами)