• C#語法學習IComparable接口


    /*
     * 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());
            }        
        }
    }

    申明

    非源创博文中的内容均收集自网上,若有侵权之处,请及时联络,我会在第一时间内删除.再次说声抱歉!!!

    博文欢迎转载,但请给出原文连接。

  • 相关阅读:
    Call指令和Ret指令讲解06 零基础入门学习汇编语言53
    【CSDN2012年度博客之星】喜欢本博客的读者,投票赠送《visual C++2010开发权威指南》电子稿感谢支持 ~(截至到2012年12月30日)
    本人新书< Visual C#2010开发权威指南>出版感谢大家一如既往的支持感谢CSDN总裁蒋涛以及他率领的CSDN团队提供的支持!
    在Windows Azure虚拟机上的SQL Server新教程
    Windows Azure Active Directory处理2000 亿个身份验证连接全球的人、 数据和设备
    宣布降低Windows Azure Storage的定价
    本人新书< Windows CE 7开发实战详解>出版感谢大家一如既往的支持感谢CSDN总裁蒋涛以及他率领的CSDN团队提供的支持!
    基于VC++2012图形化解决皇后问题
    3个 Windows Azure SQL Reporting开发的最佳做法
    现实世界的 Windows Azure: IT 公司提高其旗舰产品,为更多客户提供云解决方案
  • 原文地址:https://www.cnblogs.com/Athrun/p/1283406.html
Copyright © 2020-2023  润新知