C#泛型浅谈(浅~)自定义类型数组的排序

时间:2022-08-30 20:26:48
<strong>//1:</strong>
//先定义2个属性存书名书编号,这里有2中属性的使用方式=-=

 private int id;
private string name;
public int Id
{
get{return id ;}
set { id = value; }
}
public string Name
{
get { return name; }
set { name = value; }
}
public Book() {

}
public Book(int Id,string name) {

this.Id =Id ;
this.name = name;

}

在一个类中定义的属性;可以控制能否set;

还有另一种

   public  int Id
{
get;
set;
 }
public string Name
{ get;
set;
}
       public  Book() { 

}
public Book(int Id,string name) {

this.Id =Id ;
this.name = name;

}

不需要写内部的get,set的详情; 

要写就必须再定义变量;

2:

为了使得一个排序可以排自定义类型的数组

比如我们的Book类

我们定义一个接口(在进行数组内元素的比较时< 、>是不能使用的因为我们的是泛型数组)

  public interface IComparable{
int CompareTo(object obj);
}
定义在类外部;

并且使Book类继承这个接口

 class Book:IComparable

{

//并在其中实现IComparable接口

  public int CompareTo(object obj)
{
Book tt =(Book )obj ;
return this.Id. CompareTo (tt.Id );
}


}

要排序当然还有一个排序类

   class SortFunc<T> where T :IComparable   //接口类型的约束,只有约束了才能比较
{
public void bubblesort(T []array){
for (int i = 0; i < array .Length-1 ; i++)
{
for (int j = 0; j < array .Length-1 ; j++)
{
if (array[j].CompareTo(array[j + 1])>0) {
T temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}

这个类也继承和Book同一个接口,可以使用CompareTo方法比较,array[j].CompareTo(array[j+1])返回一个-1或1

调用排序

   static void Main(string[] args)
{
Book[]ArrayBook=new Book [3];
Book book1 = new Book(546546,"ww");
Book book2 = new Book(2321, "ww");
Book book3 = new Book(66, "ww");
ArrayBook[0] = book1;
ArrayBook[1] = book2;
ArrayBook[2] = book3;
SortFunc<Book> sort = new SortFunc<Book>();
sort.bubblesort(ArrayBook);
foreach (Book item in ArrayBook)
{
Console .WriteLine ("www"+item.Id +"...."+item.Name );
}
Console.ReadKey();

}
=-=码完了。。
C#泛型浅谈(浅~)自定义类型数组的排序