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

时间:2012-03-08 08:20:00

标签: .net methods properties environment-variables

我正在尝试了解创建方法Environment.GetCommandLineArgs的团队的设计注意事项。

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

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

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

您怎么看?

2 个答案:

答案 0 :(得分: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]);
    }
}

如果您使用“test original”运行它,它仍会打印出“原始”。

所以当你说:

  

毕竟,返回的值一旦可用就不应该改变。

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

答案 1 :(得分:0)

根据我的理解,方法用于行动(做某事)。所以调用一个方法意味着你要经历一些重要的逻辑,比如计算或调用数据库。属性基本上只是用于获取或设置变量。如果你想要一个人的名字你将拥有一个属性'Name'并将其称为person.Name而不是person.Name()。但是如果你想要这个人的年龄并且你只有生育年,那么你可能会有一个方法GetAge(),它具有计算年龄的基本逻辑。也许我在这里完全错了,但我的理解是方法用于更大的代码和逻辑块,而属性用于(更多)简单地设置和获取值。