c# - 为什么 System.Array 的大多数方法都是静态的?

标签 c# .net arrays static system.array

<分区>

我想这更像是一个框架设计问题。我最近想知道为什么 System.Array 中的大多数方法都是静态的。我的直觉 react 总是使用例如Array 实例上的 IndexOf(object),而不是 System.Array.IndexOf(array, object)。决定是否将方法设为静态是否有一个主要原则?

我发现了这个问题: When is it best to use Static Functions in ASP.NET

但它并没有让我满意:-/

最佳答案

您继承 System.Array 的大部分时间是使用一维数组。喜欢:

int[] a1 = new int[2];

当您定义 int[] 时,它隐式派生自 System.Array 类型,如@Sergey Rybalkin 所说。在这种情况下,IndexOf 方法最好作为实例方法而不是静态方法来实现。

但还有另一种类型继承自 System.Array,如多维数组。在这种情况下(多维)方法 IndexOf 没有意义。

测试这个:

int[,] arr = new int[2, 2];

arr[0, 0] = 3; arr[1, 0] = 4;
arr[0, 1] = 5; arr[1, 1] = 6;

Array.IndexOf(arr, 4);

最后一个 like 抛出 RankException 并显示消息 “Only single dimension arrays are supported here.”

也许,而且最有可能的是,正因为如此,这个方法被实现为静态的。

...

关于评论是否有一个主要原则决定是否将方法设为静态?

有的,原理也很简单。实例方法表示对象的 Action 或行为。静态方法是与类逻辑相关的系统函数,或者在某些情况下是您希望在不创建类实例的情况下调用的方法。

System.Math 类中思考,如果您每次都需要实例数学来调用 SqrtPow 之类的方法,那将会是多么困惑?

我要给你的最后一个例子是 System.Text.RegularExpressions.Regex 类。此类具有作为实例实现的 Match 方法和作为静态实现的重载。

每一个都在不同的上下文中使用。当您多次使用相同的模式时,将使用该实例。当您在代码中使用模式的唯一时间时的静态。

关于c# - 为什么 System.Array 的大多数方法都是静态的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16713384/

相关文章:

c# - EWS 流订阅 System.Xml.XmlException

C# 谷歌静态 map 编码路径计算

c# - 使用 System.Version 进行通用版本控制

python - 如何在Python中有效地扩展数组?

javascript - 数组按下按钮点击jquery

c++ - 如何在 C++ 中创建一个长度等于用户输入的数组?

c# - 存储数据的文本文件

c# - MVC 5 构建在 Visual Studio Team Services 上失败

c# - 没有从 DBNull 到可空类型的隐式转换有技术原因吗?

.net - 在 .NET 中实现 Trie 的明智方法是什么?