如何将 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();
所以我有这个简单的 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();