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();
}
}
}
- IComparer 和 IComparable
- IComparable和IComparer
- icomparable和icomparer
- 泛型 和IComparable、IComparer
- IComparable和Icomparer接口
- IComparable和IComparer接口
- IComparer和IComparable的区别
- Icomparer和Icomparable用法浅谈
- IComparer和IComparable的区别
- C# IComparable 和 IComparer 区别
- IComparable接口和IComparer接口(一)
- C#中IComparer和IComparable接口
- C#中IComparable和IComparer的应用
- 用实例来理解IComparable和IComparer
- IComparable and IComparer
- IComparable,IComparer排序实例
- IComparer IComparable比较大小
- IComparable IComparer应用
- 兆鹏和你学PHP——PDO调试和浏览器显示500错误
- Visual Studio 2010环境下Sqlite3加密版(由wxSqlite制作)使用方法
- ClassLoader编程实践
- 克服困难 提升生命质量
- CString
- icomparable和icomparer
- python for maya 系列入门中文视频(52gfx.com出品)
- 读“如何写出无法维护的代码”有感
- 苹果在第二批22个国家推出iPhone 4S预订
- Qt中如何使用样式表QPalette以及相关注意事项
- 用QT创建新风格Howto
- html注入解决办法记录
- Config::Std 使用
- Java中System对象的使用