我在C#中创建的所有数组都是从Array类中隐式继承的。那么为什么Sort()等方法不能用于我创建的数组。 例如,请考虑以下代码:
int [] arr = new int[]{1,2,3,4,5};
Console.WriteLine(arr.Length); //This works,Length property inherited from Array
Array.Sort(arr); //Works
arr.Sort(); //Incorrect !
请帮助 谢谢。
答案 0 :(得分:12)
这是因为Sort方法是在Array类上定义的静态方法,所以你需要像这样调用它:
Array.Sort(yourArray);
您不需要该类的实例来调用静态方法。你可以直接在类名上调用它。在OOP中,静态方法没有继承的概念。
答案 1 :(得分:2)
Sort
是Array
类的静态方法,这就是您使用Array.Sort()
调用它的原因。当您尝试arr.Sort()
时,您正在尝试访问不存在的实例方法。
答案 2 :(得分:2)
您可以使用扩展方法将Sort函数添加为Array类型的实例成员。
public static class ArrayExtension
{
public static void Sort(this Array array)
{
Array.Sort(array);
}
}
实施例
int [] arr = new int[]{1,2,3,4,5};
arr.Sort();
免责声明:我没有编译并试过这个,但我很确定它会起作用。
答案 3 :(得分:1)
Array.Sort()是一种静态方法,因此您不会看到它挂起实例。但是,您可以在任何IEnumerable上使用OrderBy()扩展方法来执行您所寻求的操作。