Environment.GetCommandLineArgs - почему это метод? Почему не собственность? - PullRequest
8 голосов
/ 08 марта 2012

Я пытаюсь понять конструктивные соображения команды, создавшей метод Environment.GetCommandLineArgs.

Это могло бы быть статическим свойством, очень похожим на System.Web.HttpContext.Current.В конце концов, возвращаемое значение не должно изменяться, если оно доступно.Так что это больше похоже на свойство текущего запущенного процесса.

Я знаю, что любое свойство в .NET является синтаксическим сахаром для методов получения / установки.Но это точная причина использования свойства, а не явного метода получения.

Или, может быть, здесь что-то мне не хватает?

Как вы думаете?

Ответы [ 2 ]

4 голосов
/ 08 марта 2012

Я подозреваю, что это потому, что он делает копию массива каждый раз, когда вы вызываете его. Например, рассмотрим эту программу:

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]);
    }
}

Если вы запустите это с «тестовым оригиналом», он все равно распечатает «оригинал».

Итак, когда вы говорите:

В конце концов, возвращаемое значение не должно изменяться, если оно доступно.

На самом деле, он будет возвращать другое значение (новую ссылку на массив) при каждом вызове, именно потому, что массивы всегда изменяемы.

0 голосов
/ 08 марта 2012

Насколько я понимаю, методы используются для действий (что-то делают). Таким образом, вызов метода будет означать, что вы проходите через большую (большую) часть логики, такую ​​как вычисление или вызов базы данных-хранилища. И свойства в основном только для получения или установки переменных. Если вам нужно имя человека, у вас будет свойство «Имя», которое будет называться person.Name, а не person.Name (). Но если вам нужен возраст человека и у вас есть только год рождения, у вас, вероятно, будет метод GetAge () с базовой логикой для расчета возраста. Возможно, я здесь совершенно неправ, но я понимаю, что методы используются для больших кусков кода и логики, тогда как свойства используются для (более) простой установки и получения значений.

...