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

    申明

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

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

  • 相关阅读:
    python测试开发django-99.views视图中 locals() 函数使用
    python测试开发django-98.views视图函数中request参数详解
    jenkins学习18
    Assignment Problem的若干思考
    为博客园文章添加 “分享到Teams”按钮
    新书上市——Microsoft Teams 平台完全手册
    《Microsoft Teams 平台完全手册》第三章出炉
    Microsoft Teams平台手册公开邀请试读
    《Microsoft Teams平台完全手册》开工
    Teams 开发平台月报(2021-03)
  • 原文地址:https://www.cnblogs.com/Athrun/p/1283406.html
Copyright © 2020-2023  润新知