(1) 创建一个集合类People ,它是下述Person类的集合,该集合中的项可以通过一个字符串索引符来访问,该字符串索引符是人的姓名,与Person.Name 属性相同:
public class Person public string Name public int Age |
(2) 扩展上一题中的Person 类,重载>、<、>=和<=运算符,比较Person实例的Age属性。
(3) 给People 类添加GetOldest()方法,使用上面定义的重载运算符,返回其Age属性值为最大的Person 对象数组(1个或多个对象,因为对于这个属性而言,多个项可以有相同的值)。
(4) 在People 类上执行ICloneable接口,提供深度复制功能。
(5) 给People 类添加一个迭代器,在下面的foreach循环中获取所有成员的年龄:
foreach(int age in myPeople.Ages) |
参考答案:
public class Person
{
//定义字段
private string name;
private int age;
//定义属性
public string Name
{
get { return name; }
set { name = value; }
}
public int Age
{
get { return age; }
set { age = value; }
}
//定义运算符重载
public static bool operator >(Person p1, Person p2)
{
return p1.Age > p2.Age ? true : false;
}
public static bool operator <(Person p1,Person p2)
{
return p1.Age < p2.Age ? true : false;
}
public static bool operator >=(Person p1, Person p2)
{
return p1.Age >= p2.Age ? true : false;
}
public static bool operator <=(Person p1, Person p2)
{
return p1.Age <= p2.Age ? true : false;
}
}
//定义Person类的集合People
public class People : DictionaryBase,ICloneable //继承于DictionaryBase DictionaryBase实现了IDictionary接口
{
public void Add(Person p)
{
Dictionary.Add(p.Name, p);
}
public void Remove(string nameID)
{
Dictionary.Remove(nameID);
}
public Person this[string nameID]
{
get { return (Person)Dictionary[nameID];}
set { Dictionary[nameID] = value; }
}
//给People类添加GetOldest()方法,使用上面的重载运算符,返回其Age属性值为最大的Person对象数组(1个或多个对象)
public Person[] GetOldest()
{
Person olderPerson = null;
People currentPeople = new People();
Person currentPerson;
foreach (DictionaryEntry de in Dictionary)
{
currentPerson = de.Value as Person;
if (olderPerson == null)
{
olderPerson = currentPerson;
currentPeople.Add(currentPerson);
}
else
{
if (currentPerson > olderPerson)
{
currentPeople.Clear();
currentPeople.Add(currentPerson);
olderPerson = currentPerson;
}
else
{
if (currentPerson == olderPerson)
{
currentPeople.Add(currentPerson);
}
}
}
}
Person[] personArray = new Person[currentPeople.Count];
int index=0;
foreach (DictionaryEntry de in currentPeople)
{
personArray[index] = de.Value as Person;
index++;
}
return personArray;
}
//深度复制
public object Clone()
{
Person currentPerson;
Person newPerson;
People clonePeople = new People();
foreach (DictionaryEntry de in Dictionary)
{
currentPerson = de.Value as Person;
newPerson = new Person();
newPerson.Age = currentPerson.Age;
newPerson.Name = currentPerson.Name;
clonePeople.Add(newPerson);
}
return clonePeople;
}
//迭代器是个属性
public IEnumerable Ages
{
get
{
foreach (object ob in Dictionary.Values)
{
yield return (ob as Person).Age;
}
}
}
}