Применение стандартных интерфейсов в собственных классах. Реализация итератора для класса. Создание клона - C#
Формулировка задачи:
Общая постановка задачи:
Каждый разрабатываемый класс должен содержать:
o скрытые данные
o перегрузку конструкторов
o методы ввода-вывода данных
o свойства класса
В основной программе описать массив из экземпляров разработанного класса. Реализовать следующие операции:
1. Создать клон разработанного класса
2. Отсортировать массив по одному критерию сортировки
3. Отсортировать массив по нескольким (заданным) критериям сортировки
4. Организовать перебор элементов массива с помощью простейшего итератора foreach.
Класс “Дата”. Поля – год, день, месяц
Решение задачи: «Применение стандартных интерфейсов в собственных классах. Реализация итератора для класса. Создание клона»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
namespace freed7
{
class Program
{
static void Main(string[] args)
{
MyDate[] DateCollection = new MyDate[3]{new MyDate(1980,12,"Понедельник"),
new MyDate(1978,03,"Среда"),
new MyDate(2010,05,"Вторник")};
Console.WriteLine("Весь массив:");
foreach (var item in DateCollection)
Console.WriteLine(item);
Console.WriteLine("Перебор по одному критерию:");
foreach (var item in DateCollection)
{
if (item._Year >= 2000)
Console.WriteLine(item);
}
Console.WriteLine("Перебор по двум критериям:");
foreach (var item in DateCollection)
{
if (item._Year > 1970 && item._Month < 12)
Console.WriteLine(item);
}
MyDate MyClone = (MyDate)DateCollection[0].Clone();
Console.WriteLine("Клон элемента:");
Console.WriteLine(MyClone);
Console.Read();
}
}
public class MyDate:IEnumerable,ICloneable
{
private int Year;
private int Month;
private string Day;
public int _Year { get { return Year; } }
public int _Month { get { return Month; } }
public string _Day { get { return Day; } }
public MyDate() { }
public MyDate(int Y,int M,string D)
{
Year = Y;
Month = M;
Day = D;
}
public void SetYear(int y)
{
if (y != 0 && y.ToString().Length==4)
Year = y;
else
throw new ArgumentException("Формат ввода не соответствует!");
}
public void SetDay(string d)
{
if (d != null)
Day = d;
else
throw new ArgumentException("Формат ввода не соответствует!");
}
public void SetMonth(int m)
{
if (m != 0 && m <= 12)
Month = m;
else
throw new ArgumentException("Формат ввода не соответствует!");
}
public override string ToString()
{
return string.Format("Год: {0}, месяц: {1}, день: {2}",
Year, Month, Day);
}
public IEnumerator GetEnumerator()
{
return this.GetEnumerator();
}
public object Clone()
{
MyDate temp = new MyDate();
temp.Year = this.Year;
temp.Month = this.Month;
temp.Day = this.Day;
return temp;
}
}
}