C# 从数组类继承

C# 从数组类继承,c#,.net,arrays,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 ! 请帮忙 谢谢。这是因为该方

我在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 !
请帮忙 谢谢。

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

Array.Sort(yourArray);

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

Sort
Array
类上的一个静态方法,这就是为什么使用
Array.Sort()调用它的原因。当您尝试
arr.Sort()
时,您正在尝试访问一个不存在的实例方法。

Array.Sort()是一个静态方法,因此您不会看到它挂起实例。但是,您可以在任何IEnumerable上使用OrderBy()扩展方法来执行所需操作。

您可能可以使用扩展方法添加排序函数作为数组类型的实例成员

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();

免责声明:我还没有编译并尝试过这个,但我非常确信它会起作用。

谢谢您的回复。因此,静态方法不会被继承。有什么特别的原因吗?还有,静态数据成员可以被继承吗?@Joe:与其说它们没有被继承,不如说你不在实例上调用它们。在本例中,您恰好为该方法提供了一个实例,但这实际上是一个巧合。哦,我现在明白了!:)。。谢谢:)OrderBy不会在内部对数组进行排序;它创建一个单独的(但已排序的)序列。这不是一回事。@Marc-你完全正确。在我解释了静态方法方面之后,我只是想给他一个替代方案来实现他的目标。谢谢。有很多原因。。。比如说,你不能继承一个数组,这里的“隐式”是什么意思?我认为,落入成功的陷阱是一种特性。数组不知道如何对自身进行排序。我想知道他们为什么没有修改数组。在引入ExtensionMethods时,首先对签名进行排序。使用静态版本的旧代码仍然可以编译,因为编译器处理的是语法糖,所以现有的二进制文件不应该受到影响。(尽管这意味着添加ArrayExtensions类或放松扩展的“非泛型、非嵌套、静态类”约束)