icomparable和icomparer

来源:互联网 发布:opencv python文档 编辑:程序博客网 时间:2024/05/29 11:03
 

icomparable
接口,里面含有比较方法compareTo();可以调用.sort()方法进行排序。类如果实现了这个接口中的compareTo(),就可以说明该类对象是可以比较的。这个方法可返回一个整数值。
1.当返回值<0,当前实例小于object;
2.当返回值=0,当前实例小于object;
3.当返回值>0,当前实例小于object;
这个接口就好比一个模板,定义了对象必须实现的方法,让这些方法可以作为接口实例被引用。
例如在同一个命名空间下:
有一个Student类:该类实现了icomparable接口。
public class Student:icomparable<Student>
{
 public Student() { }
        public Student(int _age, string _name, char _sex, string _hobby)
            : base(_age, _name, _sex)
        {
            this.Hobby = _hobby;
        }

        private string hobby;

        public string Hobby
        {
            get { return hobby; }
            set { hobby = value; }
        }

//里面实现了一个compareTo()方法
  public int CompareTo(Student other)
        {
            return this.Age.CompareTo(other.Age );
        }

}
然后在另一个窗体中对类实例化通过实现该类接口调用sort()方法,对该类的属性值进行比较大小排序。
 List<Student> stu = new List<Student>();
        private void Form1_Load(object sender, EventArgs e)
        {
            Student stu1 = new Student();
            stu1.Name  = "zhangming";
            Student stu2 = new Student();
            stu2.Name = "liting";
            Student stu3 = new Student();
            stu3.Name = "wanghan";
            stu.Add(stu1 );
            stu.Add(stu2);
            stu.Add(stu3);
            stu.Sort();
            foreach (Student  var in stu )
            {
                MessageBox.Show(var.Name);
            }
        }
    接口的使用:
(1)接口可以作为参数使用:当接口作为参数使用的时候传递的是实现该接口的对象
(2)接口可以作为返回值使用:接口作为返回值的时候返回的也不是接口本身,同样是实现该接口的对象。

icomparer是一个对比较的补充作用,里面含有两个参数,排序时 ,调换对象的位置即可。使用 IComparer 是一个包含两个步骤的过程。第一次,声明一个类实现 IComparer,然后实现 比较 方法:
//声明一个类实现icomparer
例:public class NameAsc :IComparer <Student >
    {
        public int Compare(Student x, Student y)
        {
            return x.Name.CompareTo(y.Name);
        }
    }
    public class NameDesc :IComparer <Student>
    {
           public int Compare(Student x, Student y)
        {
            return y.Name.CompareTo(x.Name);
        }
    }
    public class AgeAsc:IComparer <Student>
    {
        public int Compare(Student x, Student y)
        {
            return x.Age .CompareTo(y.Age);
        }
    }
    public class AgeDesc :IComparer <Student>
    {
        public int Compare(Student x, Student y)
        {
            return y.Age.CompareTo(x.Age);
        }
    }
}
//实现比较方法
    List<Student> stu = new List<Student>();
        private void 排序_Load(object sender, EventArgs e)
        {
            Student s1 = new Student();
            s1.Age = 18;
            s1.Name = "zhaopengbo";
            Student s2 = new Student();
            s2.Age = 22;
            s2.Name = "dabao";
            Student s3 = new Student();
            s3.Age = 23;
            s3.Name = "wangsan";      
            stu.Add(s1 );    
            stu.Add(s2);     
            stu.Add(s3);
            stu.Sort();
            bind();
        }
        public void bind()
        {
            listView1.Items.Clear();
            foreach (Student  var in stu)
            {             
               ListViewItem lvi = new ListViewItem(var.Name );
                lvi.SubItems.Add(var.Age.ToString ());
                listView1.Items.Add(lvi);
            }          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            stu.Sort(new NameAsc ());
            bind();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            stu.Sort(new  NameDesc ());
            bind();
        }

        private void button3_Click(object sender, EventArgs e)
        {
            stu.Sort(new  AgeAsc());
            bind();
        }

        private void button4_Click(object sender, EventArgs e)
        {
            stu.Sort(new  AgeDesc ());
            bind();
        }
    }
}

原创粉丝点击