- 爱易网页
 
                        - 
                            C#教程
 
                        - 简单的学生信息排序有关问题,(接口) 
 
                         
                    
                    
                    日期:2014-05-17  浏览次数:20989 次 
                    
                        
                         简单的学生信息排序问题,(接口)
/// <summary>
     /// 年龄升序
     /// </summary>
     public class AgeSort : IComparer<Student>
     {
         public int Compare(Student x, Student y)
         {
             return x.StdBorn.CompareTo(y.StdBorn);
         }
     }
     /// <summary>
     /// 年龄倒序
     /// </summary>
     public class AgeDescSort : IComparer<Student>
     {
         public int Compare(Student x, Student y)
         {
             return y.StdBorn.CompareTo(x.StdBorn);
         }
     }
     /// <summary>
     /// 姓名升序
     /// </summary>
     public class NameSort:IComparer<Student>
     {
         public int Compare(Student x, Student y)
         {
             return x.Name.CompareTo(y.Name);
         }
     }
     /// <summary>
     /// 工厂类
     /// </summary>
     public class Factory
     {
         public static IComparer<Student> StuSort(string sortType)
         {
             return Assembly.GetAssembly(typeof(Factory)).CreateInstance("ConsoleApplication2."+sortType) as IComparer<Student>;
         }
     }
      
     /// <summary>
     /// 学生类
     /// </summary>
     public class Student : IComparable<Student>
     {
         //学号
         public int stdId { get; set; }
         //姓名
         public string Name { get; set; }
         //座位号
         public int SeatNo { get; set; }
         //出生日期
         public DateTime StdBorn { get; set; }
         public int CompareTo(Student other)
         {
             return this.stdId.CompareTo(other.stdId);
         }
     }
     class Program
     {
         static void Main(string[] args)
         {
             List<Student> stuList = new List<Student>()
             {
                 new Student{stdId=4,Name="b",SeatNo=2,StdBorn=new DateTime(1991,1,1)},
                  new Student{stdId=3,Name="c",SeatNo=3,StdBorn=new DateTime(1993,1,1)},
                   new Student{stdId=2,Name="d",SeatNo=4,StdBorn=new DateTime(1994,1,1)},
                    new Student{stdId=1,Name="a",SeatNo=1,StdBorn=new DateTime(1992,1,1)},
         
             };
             stuList.Sort(Factory.StuSort("AgeSort"));
             for (int i = 0; i < stuList.Count; i++)
             {
                 Console.WriteLine(stuList[i].stdId+"\t"+stuList[i].Name+"\t"+stuList[i].SeatNo+"\t"+stuList[i].StdBorn);
             }
             Console.WriteLine();
             stuList.Sort(Factory.StuSort("NameSort"));
             for (int i = 0; i < stuList.Count; i++)
             {
                 Console.WriteLine(stuList[i].stdId + "\t" + stuList[i].Name + "\t" + stuList[i].SeatNo + "\t" + stuList[i].StdBorn);
             }
         }
     }
           以上是代码,stuList.Sort(Factory.StuSort("NameSort"));我调用工厂类的方法使却不走那个对象内部的方法,反而走Student类的方法,每次排序结束都是stdID顺序,很是苦恼,求好心朋友相助
------解决方案--------------------