如何将IComparer实现为内部类

时间:2016-10-18 16:56:16

标签: c# icomparer

所以我有这个简单的课程:

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需要在compare属性的Mobile对象之间实现_model

所以我的问题是如何从main获取此Compare方法?

I try Mobile.MobileModelComparer

2 个答案:

答案 0 :(得分:2)

您需要创建yield()的实例。每次需要实例时,您可以使用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 }

注意:对于版本6之前的C#,请移除Mobile.ModelComparer.Compare(a, b)并添加{get;}以使readonly成为静态只读字段:

Instance

答案 1 :(得分:0)

所有内部类都改变了名称作用域,因此您可以创建一个类似于命名空间的名称:

IComparer comparer = new Mobile.MobileModelComparer();