继承自Array类

时间:2010-11-19 13:37:14

标签: c# .net arrays

我在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 !

请帮助 谢谢。

4 个答案:

答案 0 :(得分:12)

这是因为Sort方法是在Array类上定义的静态方法,所以你需要像这样调用它:

Array.Sort(yourArray);

您不需要该类的实例来调用静态方法。你可以直接在类名上调用它。在OOP中,静态方法没有继承的概念。

答案 1 :(得分:2)

SortArray类的静态方法,这就是您使用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()扩展方法来执行您所寻求的操作。