如何将 IComparer 实现为内部 class

How to implement IComparer as inner class

所以我有这个简单的 class:

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;
        }
    }
}

如您所见,内部class MobileModelComparer 需要根据_model 属性 在2 Mobile 对象之间实现compare

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

I try Mobile.MobileModelComparer

内部 class 所做的只是更改名称范围,因此您可以像在命名空间中一样创建一个:

IComparer comparer = new Mobile.MobileModelComparer();

您需要创建 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();