Конструкторы с одинаковым типом аргумента - PullRequest
7 голосов
/ 28 августа 2008

У меня есть объект Person с двумя конструкторами - один принимает int (personId), другой - строку (logonName). Я хотел бы другой конструктор, который принимает строку (badgeNumber). Я знаю, что это невозможно, но, похоже, это обычная ситуация. Есть ли изящный способ справиться с этим? Я полагаю, это относится к любому перегруженному методу. Код:

public class Person
{
    public Person() {}

    public Person(int personId)
    {
        this.Load(personId);
    }

    public Person(string logonName)
    {
        this.Load(logonName);
    }

    public Person(string badgeNumber)
    {
        //load logic here...
    }

... и т.д.

Ответы [ 12 ]

0 голосов
/ 28 августа 2008

Вы можете переключиться на шаблон заводского стиля.

public class Person {

  private Person() {}

  public static PersonFromID(int personId)
  {
    Person p = new Person().
    person.Load(personID);

    return p;
    this.Load(personId);
  }

  public static PersonFromID(string name)
  {
    Person p = new Person().
    person.LoadFromName(name);

    return p;
  }

  ...
}

Или, как предлагается, использовать пользовательские типы. Вы также можете взломать что-нибудь, используя дженерики, но я бы не рекомендовал это для удобства чтения.

0 голосов
/ 28 августа 2008

Единственное, что я могу придумать, чтобы справиться с тем, что вы хотите сделать, - это иметь параметры, один из которых описывает тип параметра (перечисление с LogonName, BadgeNumer и т. Д.), А второй - значение параметра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...