• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c#接口与虚函数的实验报告

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

1)定义Student类,用string型变量name存储学生姓名,用int型变量age存储学生年龄。Student类实现IComparable接口。要求从键盘输入学生的姓名和年龄,并注意可能出现的异常及其处理。IComparable接口定义如下(系统已定义,可直接使用)

interface IComparable

{

   int CompareTo(object obj);

//如果自身与obj相等返回0,<obj返回-1,>obj返回1 ,注意可能出现的异常

}

(2)定义Student类的派生类Master。

(3)定义Sort类,定义静态方法BubbleSortDescending(IComparable[] bubbles),实现对象的降序排列。其中,在该方法中调用接口方法CompareTo(object obj)比较两个对象的“大小”。

(4)定义Test类,按给定数据生成Student实例数组,调用BubbleSortDescending(IComparable[] bubbles)使之按姓名排序,按给定数据生成Master实例数组,调用BubbleSortDescending(IComparable[] bubbles)使之按年龄排序,请遍历输出排序前后数组中每个元素实例中的name和age。如果Master实例a与Student实例b比较,总是a>b

(5)实验数据

Name

Age

Tom

18

Nick

20

Mike

17

(a)当这三个学生全为Student的实例时,输出排序后的结果;

(b)当这三个学生全为Master类的实例时,输出排序后的结果

(c)(选作)任意指定数组中元素的类型(Student或Master),输出排序后的结果

(6)分析并解释实验结果。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Q4
{
    interface IComparable
    {
        int CompareTo(object obj);
    }

    class Student : IComparable
    {
        string name;
        int age;
        public Student(string name, int age)
        {
            this.name = name;
            this.age = age;

        }

        public virtual int  CompareTo(object obj)//对接口的方法进行重写
        {
            Student other = (Student)obj;
            if (other != null)
            {
                if (string.Compare(name,other.Name)<0) return 1;
                else if (string.Compare(name, other.name) == 0) return 0;
                else return -1;
            }
            else
                throw new ArgumentException("Object is not a Student");
        }
        public string Name
        {
            get
            {
                return name;
            }
        }

        public int Age
        {
            get
            {
                return age;
            }
        }
    }

    class Master : Student
    {
        string name;
        int age;
        public Master(string name, int age) : base(name, age)
        {
            this.name = name;
            this.age = age;
        }
        public override int CompareTo(object obj)//override 对student里的compareto方法进行重写
        {
            Master other = (Master)obj;//强制类型转换
            if (other!= null)//判断是否空,异常
            {
                if (age < other.Age) return 1;
                else if (age == other.Age) return 0;
                else return -1;
            }
            else
                throw new ArgumentException("Object is not a Master");
        }

        public new string Name
        {
            get
            {
                return name;
            }
        }

        public new int Age
        {
            get
            {
                return age;
            }
        }
    }

    class Sort
    {
       static IComparable g;//在静态函数里面的变量也要用静态
        public static void BubbleSortDescending(IComparable[] bubbles)
            //因为这里student类继承icomparable,而master继承student,所以这里要用ICmparable
        {
            for (int i = 0; i < bubbles.Length - 1; i++)
            {
                if (bubbles[i].CompareTo(bubbles[i + 1]) > 0)
                {
                    g = bubbles[i];
                    bubbles[i] = bubbles[i + 1];
                    bubbles[i + 1] = g;

                }
            }
        }
    }



    class Test
    {
        static void Main(string[] args)
        {
            IComparable[] a = new Student[3];//用了多态,因为Student继承IComparable,所以可以这样写
            a[0] = new Student("Tom", 18);//c初始化,也是要用new
            a[1] = new Student("Nike", 20);
            a[2] = new Student("Mike", 17);
            Sort.BubbleSortDescending(a);
            foreach(Student b in a )//a是数组名所以直接 in a
            {
                Console.WriteLine("{0}----{1}", b.Name, b.Age);
            }

            Master[] c = new Master[3];
            c[0] = new Master("Tom", 18);
            c[1] = new Master("Nike ", 20);
            c[2] = new Master("Mike", 17);
            Sort.BubbleSortDescending(c);
            Console.WriteLine();
            foreach(Master d in c)
            {
                Console.WriteLine("{0}----{1}", d.Name, d.Age);
            }

        }
    }
}

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#后台处理http请求发布时间:2022-07-18
下一篇:
c#连接sqlserver数据库字符串发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap