質問

私は人のオブジェクトを二つのコンストラクタ-についての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...
    }

など---。

役に立ちましたか?

解決

あると考え用カスタムです。

例えば、LogonNameとBadgeNumberます。

その関数の宣言のように見え...

public Person(LogonName ln)
{
    this.Load(ln.ToString());
}

public Person(BadgeNumber bn)
{
    //load logic here...
}

その解決策がすのに良い場所でのビジネスロジックが支配的となるのフォーマットおよび使用のこれらの文字列です。

他のヒント

きも利用ファクトリメソッドょうか?

public static Person fromId(int id) {
    Person p = new Person();
    p.Load(id);
    return p;
}
public static Person fromLogonName(string logonName) {
    Person p = new Person();
    p.Load(logonName);
    return p;
}
public static Person fromBadgeNumber(string badgeNumber) {
    Person p = new Person();
    // load logic
    return p;
}
private Person() {}

いつのオプションできたらいいのにと思い、既に取り組んでいる名前によるその他のもの

  1. の工場ルート、このように複数のその他。一不利益を及ぼすことはできない一貫したネーミング経由でオーバーロードまたは他って同じ問題で、表面的に弱ます。別の大きな欠点であることを妨げる可能性の配分に直接スタックです。すべてのものを割り当てられるヒープをご希望の場合です。

  2. カスタムオブジェクトの包装.これは良いアプローチの一つのものをお勧めします場合はゼロから立ち上げました。また多くのコードを用い、例えば、バッジとして文字列を書き換えコードで、いつかこのような非可能なオプションです。

  3. 追加の列挙型の方法を指定するどのように扱うのかを文字列になります。この作品がす必要があるので書き換えて、既存の電話に新しい列挙ができる場合は、デフォルトの希望にもあります。

  4. 追加ダミーパラメータが未使用の間の区別に過度の負荷.例えばタック、 bool の方法。このアプローチを標準図書館のいくつかの場所など std::nothrow ダミーのパラメータ operator new.デメリットのこころとなる。

持っている人は、手続きをすれば大型の拠点に、既存のコードでおすすめのいずれかの追加の列挙(の可能性のあるデフォルト値)または追加するダミーパラメータとします。に関する情報は見つかりませんで美しくもはかなり簡単に装.

の場合、ゼロからやって少量のコードでおすすめのカスタムオブジェクトの包装.

のファクトリメソッドもオプションの場合コードする多用途に原 badge/logonName 文字列がなく利用 Person クラスです。

ご利用の場合はC#3.0を使用でき オブジェクトInitializers:

public Person()
{
}

public string Logon { get; set; }
public string Badge { get; set; }

呼び出すとよいでしょう、コンストラクタのようになります:

var p1 = new Person { Logon = "Steve" };
var p2 = new Person { Badge = "123" };

No.

あると考え旗分野のenumで読みやすく、そのコンストラクタを使用htatを決定する意味はそういうことです。

なんじゃないかと思います。あると考え作りのクラスと呼ばれBadgeNumberのロッドやルアーを使用することは文字列を避けるため、この定義しています。

できない場合もありますので二つの異なるコンストラクタ、メソッドと同じ署名、そうでない場合はどのようにコンパイラを決定する方法です。

として Zackと, もの創造を検討する"オプション"クラスでの実際のパラメータに含まれるカスタムタイプです。このことができますかパスとして多くのパラメータになること間違いなしというようにオプションに注意してください頂を積層する方法そうとするもの..

のいずれか、または投票のための パターン工場..

を使用してくださstaticファクトリメソッド:

public static Person fromLogon(String logon) { return new Person(logon, null); }
public static Person fromBadge(String badge) { return new Person(null, badge); }

していることが示唆されている、カスタム型にはます。

も考えることができる取り扱いいいいparams,記述したものparam型の列挙型とLogonName,BadgeNumerなど)とのparam値です。

きスイッチを工場のスタイルパターンです。

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

  ...
}

または、示唆されるように、利用カスタムです。できません用のジェネリック医薬品がないのですが可読性

いかが---

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

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

public Person(Object badgeNumber)
{
    //load logic here...
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top