Environment.GetCommandLineArgs - 为什么它是一个方法?为什么不是财产?

Ron*_*ein 8 .net methods properties environment-variables

我试图了解创建该方法的团队的设计考虑因素Environment.GetCommandLineArgs.

它可能是一个静态属性,非常像System.Web.HttpContext.Current.毕竟,返回的值一旦可用就不应该改变.所以它更像是当前运行过程的属性.

我知道.NET中的任何属性都是getter/setter方法的语法糖.但这是使用属性而不是显式getter方法的确切原因.

或者也许我在这里缺少一些东西?

你怎么看?

Jon*_*eet 4

我怀疑这是因为每次调用它时它都会复制该数组。例如,考虑这个程序:

using System;

public class Test
{
    static void Main(string[] args)
    {
        string[] argsCopy = Environment.GetCommandLineArgs();
        args[0] = "x";

        // 0 is the command in this case
        argsCopy[1] = "y";

        string[] argsCopy2 = Environment.GetCommandLineArgs();
        Console.WriteLine(argsCopy2[1]);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您使用“测试原始”运行它,它仍然会打印出“原始”。

所以当你说:

毕竟,返回值一旦可用就不应更改。

实际上,它会在每次调用时返回不同的值(一个新的数组引用),正是因为数组总是可变的。