Pull to refresh

Новые атрибуты в .NET 4

Reading time2 min
Views717
Original author: Morgan Skinner
Представляю вам два новых атрибута, которые улучшат продуктивность, за счет уменьшения объема кода:
  • [Optional]
  • [DefaultParameterValue]


Я уверен, что почти у каждого из вас присутствует в проектах следующий код:
public class Thingy
{
  public Thingy()
    : this("Default", -1)
  {
  }

  public Thingy(string name)
    : this(name, -1)
  {
  }

  public Thingy(string name, int whatever)
  {
    _name = name;
    _whatever = whatever;
  }

  // Other code...

  private string _name;
  private int _whatever;
}


* This source code was highlighted with Source Code Highlighter.

И в этом нет ничего страшного, но я считаю, что три конструктора в данном случае выглядят безобразно. Я бы предпочел иметь один. Но что если мы вдруг захотим изменить значение по умолчанию переменной whatever? А ведь у нас два места в коде, где она используется, которые нам придется изменить — довольно неудобное действие.

Но с новыми атрибутами, мы можем иметь только один конструктор.
public class Thingy
{
  public Thingy([Optional, DefaultParameterValue("Default")] string name,
         [Optional, DefaultParameterValue(-1)]int whatever)
  {
  }
}


* This source code was highlighted with Source Code Highlighter.

Теперь код выглядит значительно лучше, согласны? Мои значения по умолчанию в одном месте, да и конструктор у меня один, а не три. Данный способ работает и с обычными методами.

И да, использовать атрибуты не обязательно, вы можете реализовать все другим, опять таки, новым способом.
public class Thingy2
{
  string n;
  int i;

  public Thingy2(string name = «Default», int whatever = -1)
  {
    n = name;
    i = whatever;
  }
}


* This source code was highlighted with Source Code Highlighter.
Tags:
Hubs:
+15
Comments21

Articles

Change theme settings