Дополнительно в классе Student
-
определить перегруженную версию виртуального метода object DeepCopy();
-
реализовать интерфейс IDateAndCopy;
-
определить свойство типа int с методами get и set для доступа к полю с номером
группы. В методе set бросить исключение, если присваиваемое значение меньше
или равно 100 или больше 599. При создании объекта-исключения использовать
один из определенных в библиотеке CLR классов-исключений, инициализировать
объект-исключение с помощью конструктора с параметром типа string, в
сообщении передать информацию о допустимых границах для значения свойства.
В отдельном методе Main()
1. Создать один объект типа Student, преобразовать данные в текстовый вид с
помощью метода ToShortString() и вывести данные.
2. Присвоить значения всем определенным в типе Student свойствам,
преобразовать данные в текстовый вид с помощью метода ToString() и
вывести данные.
3. C помощью метода AddExams(params Exam[]) добавить элементы в список
экзаменов и вывести данные объекта Student, используя метод ToString().
4. Создать два объекта типа Person с совпадающими данными и проверить, что
ссылки на объекты не равны, а объекты равны, вывести значения хэш-кодов для
объектов.
5. Создать объект типа Student, добавить элементы в список экзаменов и
зачетов, вывести данные объекта Student.
6. Вывести значение свойства типа Person для объекта типа Student.
7. С помощью метода DeepCopy() создать полную копию объекта Student.
Изменить данные в исходном объекте Student и вывести копию и исходный
объект, полная копия исходного объекта должна остаться без изменений.
8. В блоке try/catch присвоить свойству с номером группы некорректное
значение, в обработчике исключения вывести сообщение, переданное через
объект-исключение.
9. С помощью оператора foreach вывести список всех зачетов и экзаменов.
10. С помощью оператора foreach для итератора с параметром вывести список
всех экзаменов с оценкой выше 3.
class Person:IDateAndCopy
{
private string name;
private string secondName;
private DateTime date;
public Person(string name, string secondName, DateTime date)
{
this.name = name;
this.secondName = secondName;
this.date = date;
}
public Person()
{
name = "name";
secondName = "second name";
date = new DateTime(1900, 1, 1);
}
public string Name
{
get{ return name; }
set{ name = value; }
}
public string SecondName
{
get { return secondName; }
set { secondName = value; }
}
public DateTime Date
{
get { return date; }
set { date = value;}
}
public int Year
{
get{return date.Year;}
set { date = new DateTime(value,date.Month,date.Day); }
}
public override string ToString()
{
return "Имя: " + name + "\n" + "Фамилия: " + secondName+"\n" + "Дата рождения: " + date.ToShortDateString();
}
public virtual string ToShortString()
{
return "Имя: "+ name+"\n" + "Фамилия: " + secondName;
}
public override bool Equals(Object obj)
{
Person person = (Person)obj;
bool value = false;
if(obj != null)
if (name.Equals(person.name))
if (secondName.Equals(person.secondName))
if (date.Equals(person.date))
value=true;
return value;
}
public override int GetHashCode()
{
return name.Length+secondName.Length+date.Day+date.Month+date.Year;
}
public static bool operator ==(Person p1, Person p2)
{
bool result = false;
if (p1.name.Equals(p2.name))
if (p1.secondName.Equals( p2.secondName))
if (p1.date.Equals(p2.date))
result = true;
return result;
}
public static bool operator !=(Person p1, Person p2)
{
bool result = true;
if (p1.name.Equals(p2.name))
if (p1.secondName.Equals(p2.secondName))
if (p1.date.Equals(p2.date))
result = false;
return result;
}
public object DeepCopy()
{
Person person = new Person(name, secondName, date);
return person;
}
}
class Test:IDateAndCopy
{
string name;
bool resultTest;
DateTime date;
public Test(string name, bool resultTest,DateTime date)
{
this.name = name;
this.resultTest = resultTest;
this.date = date;
}
public Test()
{
name = "Name";
resultTest = true;
date = new DateTime(1900, 1, 1);
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
public override string ToString()
{
return "Название зачета: "+ name+"\n Результат " +resultTest.ToString()+"\n Дата "+ date.ToShortDateString();
}
public object DeepCopy()
{
Test test = new Test(name, resultTest,date);
return test;
}
}
class Exam:IDateAndCopy
{
string name;