如何实现iccomparer作为内部类

本文关键字:iccomparer 内部类 实现 何实现 | 更新日期: 2023-09-27 18:13:40

所以我有这个简单的类:

public class Mobile : IComparable
{
    private string _manufactor;
    private int _model;
    private decimal _price;
    public Mobile(string manufactor, int model, decimal price)
    {
        _manufactor = manufactor;
        _model = model;
        _price = price;
    }
    public int CompareTo(object obj)
    {
        return _price.CompareTo((obj as Mobile)._price);
    }
    public class MobileModelComparer : IComparer
    {
        public int Compare(object x, object y)
        {
            return (x as Mobile)._model - (y as Mobile)._model;
        }
    }
}

可以看出,内部类MobileModelComparer需要根据_model属性在2个Mobile对象之间实现compare

所以我的问题是如何从main到达这个Compare方法?

I try Mobile.MobileModelComparer

如何实现iccomparer作为内部类

您需要创建MobileModelComparer的实例。每次需要实例时都可以使用new;但是,由于对象没有状态,因此将其设置为静态只读实例是可行的:

public class MobileModelComparer : IComparer {
    public static IComparer Instance {get;} = new MobileModelComparer();
    ... // The rest of your code
}

现在可以使用Mobile.MobileModelComparer.Instance.Compare(a, b)

或者,您可以使Instance成为Mobile的属性,如下所示:

public static IComparer ModelComparer {get;} = new MobileModelComparer();
public class MobileModelComparer : IComparer {
    ... // The rest of your code
}
Mobile.ModelComparer.Compare(a, b)

注意:对于版本6之前的c#,删除{get;}并添加readonly以使Instance成为静态只读字段:

public static readonly IComparer Instance = new MobileModelComparer();

内部类所做的只是改变名称作用域,因此您将创建一个内部类,就像在名称空间中一样:

IComparer comparer = new Mobile.MobileModelComparer();