您的位置:首页 > 编程语言 > C#

C#語法學習IComparable接口

2008-09-03 22:13 519 查看
/*

* Created by SharpDevelop.

* User: Administrator

* Date: 2008/9/3

* Time: 下午 04:52

* 接口的應用IComparable

* 通常小的應用程序中不會應用到接口

* 在一個大的系統中會應用的比較多.

* 因為有了接口,設計人員只需要關注接口,

* 而不用去關注其實現.

* 也就出現了現在面向接口編程

* 此外在設計模式中也大量使用接口

*/

using System;

class Student:IComparable

{

private string _name;

private int _age;

public Student(string name,int age)

{

this._name=name;

this._age=age;

}

public string Name

{

get { return this._name; }

set { this._name=value; }

}

public int Age

{

get { return this._age;}

set { this._age=value; }

}

public int CompareTo(object right)

{

if(!(right is Student))

{

throw new ArgumentException("參數必須為Student類型");

}

return this._name.CompareTo(((Student)right)._name);

}

public override string ToString()

{

return _name;

}

}

class Test

{

static void Main()

{

Student[] arr=new Student[5];

arr[0]=new Student("張三",5);

arr[1]=new Student("李四",3);

arr[2]=new Student("王五",2);

arr[3]=new Student("馬六",4);

arr[4]=new Student("錢七",1);

Array.Sort(arr);

foreach(Student i in arr)

{

Console.WriteLine(i.Name + " " + i.Age);

//Console.WriteLine(i.ToString());

}

}

}

/*

* Created by SharpDevelop.

* User: Administrator

* Date: 2008/9/3

* Time: 下午 04:52

* 用接口實現排序

* 實現IComparable接口時,我們應該使用顯式接口

* 實現,同時為接口中的方法提供一個公有的強類

* 型重載版本.強類型的重載版本在提高代碼性能

* 的同時,能減少誤用CompareTo()方法的可能.

*/

using System;

using System.Collections;

class Student:IComparable

{

private string _name;

private int _age;

public Student(string name,int age)

{

this._name=name;

this._age=age;

}

public string Name

{

get { return this._name; }

set { this._name=value; }

}

public int Age

{

get { return this._age;}

set { this._age=value; }

}

//顯式調用

int IComparable.CompareTo(object right)

{

if(!(right is Student))

{

throw new ArgumentException("參數必須為Student類型");

}

return this._name.CompareTo(((Student)right)._name);

}

//公有的強類型重載版本

public int CompareTo(Student right)

{

return this._name.CompareTo(right._name);

}

//保證只創建一次AgeComparer只會產生一個實例

private static AgeComparer _ageCom=null;

public static IComparer AgeCom

{

get

{

if(_ageCom==null)

{

_ageCom=new AgeComparer();

}

return _ageCom;

}

}

private class AgeComparer:IComparer

{

int IComparer.Compare(object left,object right)

{

if(!(left is Student) || !(right is Student))

{

throw new ArgumentException("參數必須為Student類型");

}

return (((Student)left)._age.CompareTo(((Student)right)._age));

}

}

public override string ToString()

{

return _name;

}

}

class Test

{

static void Main()

{

Student[] arr=new Student[5];

arr[0]=new Student("張三",5);

arr[1]=new Student("李四",3);

arr[2]=new Student("王五",2);

arr[3]=new Student("馬六",4);

arr[4]=new Student("錢七",1);

Console.WriteLine("對姓名進行排序");

Array.Sort(arr);

foreach(Student i in arr)

{

Console.WriteLine(i.Name + " " + i.Age);

//Console.WriteLine(i.ToString());

}

Console.WriteLine("對年齡進行排序");

Array.Sort(arr,Student.AgeCom);

foreach(Student i in arr)

{

Console.WriteLine(i.Name + " " + i.Age);

//Console.WriteLine(i.ToString());

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: