C#入门经典(第三版)十一章练习题答案

 

(1) 创建一个集合类People ,它是下述Person类的集合,该集合中的项可以通过一个字符串索引符来访问,该字符串索引符是人的姓名,与Person.Name 属性相同:

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;
}
}
}

(2) 扩展上一题中的Person 类,重载>、<、>=和<=运算符,比较Person实例的Age属性。

(3) 给People 类添加GetOldest()方法,使用上面定义的重载运算符,返回其Age属性值为最大的Person 对象数组(1个或多个对象,因为对于这个属性而言,多个项可以有相同的值)。

(4) 在People 类上执行ICloneable接口,提供深度复制功能。

(5) 给People 类添加一个迭代器,在下面的foreach循环中获取所有成员的年龄:

foreach(int age in myPeople.Ages)
{
//Display 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;
                }

            }
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值