Я иногда делаю в классе и обычный метод, и явно реализуемый, с тем же именем, для удобства.
Например, иногда нужен компарер как объект с методом, а иногда объект не нужен, и тогда можно вызывать статический метод.
public class NaturalComparer : IComparer<string>
{
[DllImport("shlwapi.dll", CharSet = CharSet.Unicode)]
private static extern int StrCmpLogicalW(string psz1, string psz2);
public static int Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
int IComparer<string>.Compare(string x, string y)
{
return StrCmpLogicalW(x, y);
}
}
public class TestApp
{
public static void Main()
{
// Используем явную реализацию
var arr = new [] { "a5", "a1", "a10", "a3", "a7" };
Array.Sort(arr); // a1, a10, a3, a5, a7
Array.Sort(arr, new NaturalComparer()); // a1, a3, a5, a7, a10
// Используем статический метод
var list = new List<string> { "a5", "a1", "a10", "a3", "a7" };
const string max = "a4";
var minElements1 = list.Where(s => s.CompareTo(max) < 0).ToList(); // a1, a10, a3
var minElements2 = list.Where(s => NaturalComparer.Compare(s, max) < 0).ToList(); // a1, a3
}
}