首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Effective C# 原則 26:用 IComparable 和 IComparer 實作物件順序關係(二)

     編輯:關於C語言

隱式介面實作與型別安全比較

無法通過編譯,因公用 Customer.CompareTo(Customer right) 參數不匹配,而 IComparable.CompareTo(object right) 不可存取,只能強制轉換為 IComparable 介面後存取:

Customer c1; Employee e1;
if ((c1 as IComparable).CompareTo(e1) > 0) Console.WriteLine("Customer one is greater");

隱式實作 IComparable 並提供型別安全比較時,重載版本的強型別比較增加效能,減少他人誤用 CompareTo 可能。.NET 框架 Sort 函數仍用介面指標存取 CompareTo()(原則 19),但已知兩物件型別時程式碼效能較好。

實作關係運算子

對 Customer 結構小修改,C# 可重載標準關係運算子,應利用型別安全 CompareTo():

public struct Customer : IComparable
{
    private string _name;
    public Customer(string name) { _name = name; }
    #region IComparable Members
    int IComparable.CompareTo(object right)
    {
        if (!(right is Customer)) throw new ArgumentException("Argument not a customer", "right");
        Customer rightCustomer = (Customer)right;
        return CompareTo(rightCustomer);
    }
    public int CompareTo(Customer right) { return _name.CompareTo(right._name); }
    public static bool operator <(Customer left, Customer right) { return left.CompareTo(right) < 0; }
    public static bool operator <=(Customer left, Customer right) { return left.CompareTo(right) <= 0; }
    public static bool operator >(Customer left, Customer right) { return left.CompareTo(right) > 0; }
    public static bool operator >=(Customer left, Customer right) { return left.CompareTo(right) >= 0; }
    #endregion
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved