深入IComparable与IComparer的排序实例详解
如下所示:
using system;
using system.collections.generic;
using system.text;
using system.collections;
namespace hgoapp
{
class comparer
{
static void main()
{
employee[] employees = new employee[5];
employees[0] = new employee("张三", 2800);
employees[1] = new employee("李四", 1800);
employees[2] = new employee("王五", 5800);
employees[3] = new employee("马六", 12800);
employees[4] = new employee("钱七", 8800);
console.writeline("按照姓名排序");
array.sort(employees);
foreach (employee em in employees)
{
console.writeline(em);
}
console.writeline("按照薪水排序");
array.sort(employees, employee.salarycom);
foreach (employee em in employees)
{
console.writeline(em);
}
}
}
class employee : icomparable
{
private string _name;
public string name
{
get { return _name; }
}
private int _salary;
public int salary
{
get { return _salary; }
}
public employee(string name, int salary)
{
_name = name;
_salary = salary;
}
//显示接口实现
int icomparable.compareto(object obj)
{
if (!(obj is employee))
{
throw new argumentexception("不是employee类");
}
return _name.compareto(((employee)obj)._name);
}
//提供一个公用的强类型重载版本
public int compareto(employee em)
{
return _name.compareto(em._name);
}
//当第一次实例化employee的时候,_salarycom为空,当使用salarycom时,就会创建一个salarycompare对象,第2次,3次的时候,就可以直接使用_salarycom了
private static salarycompare _salarycom = null;
public static icomparer salarycom
{
get
{
if (_salarycom == null)
{
_salarycom = new salarycompare();
}
return _salarycom;
}
}
//嵌套类(这个类是针对薪水进行排序的类)
private class salarycompare:icomparer
{
//使用指定的icomparer对array中的元素进行排序
int icomparer.compare(object obj1,object obj2)
{
if (!(obj1 is employee) || !(obj2 is employee))
{
throw new argumentexception("不是employee类");
}
return ((employee)obj1)._salary.compareto(((employee)obj2)._salary);
}
}
public override string tostring()
{
return _name +" "+ _salary.tostring();
}
}
}
如对本文有疑问,
点击进行留言回复!!
相关文章:
-
-
-
C#实现猜数字游戏
本文实例为大家分享了c#实现猜数字游戏具体代码,供大家参考,具体内容如下给定一个0-100的随机数字猜其大小题目样式:电脑产生一个0到100之间的随机数字,并且...
[阅读全文]
-
-
C# 可空类型的具体使用
在项目中我们经常会遇到可为空类型,那么到底什么是可为空类型呢?下面我们将从4个方面为大家剖析。1、可空类型基础知识顾名思义,可空类型指的就是某个对象类型可以为空...
[阅读全文]
-
-
-
C#实现猜数字小游戏
本文实例为大家分享了c#实现猜数字小游戏的具体代码,供大家参考,具体内容如下效果如图:代码:using system;using system.collecti...
[阅读全文]
-
-
C#实现简单俄罗斯方块
最近在看《.net游戏编程入门经典 c#篇》 第一章介绍了如何制作俄罗斯方块,自己试了试按照书上的步骤,可算是完成了。于是写下这篇文章留作纪念。1.类的设计在充...
[阅读全文]
-
网友评论