所以我有这个简单的课程:
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
答案 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();