我正在尝试了解创建方法Environment.GetCommandLineArgs
的团队的设计注意事项。
它可能是一个静态属性,非常像System.Web.HttpContext.Current
。毕竟,返回的值一旦可用就不应该改变。所以它更像是当前运行过程的属性。
我知道.NET中的任何属性都是getter / setter方法的语法糖。但这是使用属性而不是显式getter方法的确切原因。
或者也许我在这里缺少一些东西?
您怎么看?
答案 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(),它具有计算年龄的基本逻辑。也许我在这里完全错了,但我的理解是方法用于更大的代码和逻辑块,而属性用于(更多)简单地设置和获取值。