2

私は連鎖コンストラクターを作成しようとしていますが、私はそれが苦手で、助けが必要です! コンストラクターの 1 つに、2 つの引数を取るコンストラクターがないというメッセージが表示されます。?

それはどういう意味ですか?別のクラスから送信された3つの文字列を処理する必要があり、それが2番目の質問につながります。それは、他のクラスからこれを呼び出すことができないということです...私はすべてを試しましたが、それを行うことができません:(感じますコンストラクターについて欠けている大きなものがありますが、誰かが私を正しい方法で指摘できると確信しています!!ここであらゆるヘルプを使用できます!!!このテーマに関するC#の本を読みましたが、あまり役に立ちません私にはグーグルがあり、多くの例がありますが、コードが機能すると思っていたので、あまり意味がありません。

これが私のクラスで、変数を送信する必要があるコンストラクターがあります。

  public class Phone
  {
    //Private Phone
    private string m_persPhone;
    //Other Phone
    private string m_otherPhone;
    //Work Phone
    private string m_privatePhone;


    public Phone()            
    {
    }

    public Phone(string personalPhone)
        : this(personalPhone, string.Empty)     //<---Problem is HERE...
    {
    }    

    public Phone(string personalPhone, string otherPhone, string privatePhone)
    {
         m_persPhone = personalPhone;
         m_otherPhone = otherPhone;
         m_privatePhone = privatePhone;
    }

    public string personalPhone
    {
        //Personal Phone
        get { return m_persPhone; }

        set { m_persPhone = value; }
    }

    public string otherPhone
    {
        //Other Phone
        get { return m_otherPhone; }

        set { m_otherPhone = value; }
    }

    public string privatePhone
    {
        //Private Phone
        get { return m_privatePhone; }

        set { m_privatePhone = value; }
    }

    public string GetToStringItemsHeadings
    {
        get { return string.Format("{0,-20} {1, -20} {2, -20}", "Personal Phone", "Other Phone", "Private Phone"); }
    }

    public override string ToString()
    {
        string strOutPhone = string.Format("{0,-20} {1, -20} {2, -20}", m_persPhone, m_otherPhone, m_privatePhone);
        return strOutPhone;
    }


}

}

//よろしく

4

4 に答える 4

2

それはどういう意味ですか?

まさにそれが言うこと。ここ:

: this(personalPhone, string.Empty)

2 つの文字列を受け入れることができるコンストラクターにチェーンしようとしています。しかし、これらはあなたが定義したコンストラクターの署名です:

public Phone()
public Phone(string personalPhone)
public Phone(string personalPhone, string otherPhone, string privatePhone)

それらのどれに連鎖することを期待していましたか? それらのどれも 2 つのパラメーターを持っていません。

私はあなたが欲しいと思う:

: this(personalPhone, string.Empty, string.Empty)
于 2012-08-03T20:19:38.857 に答える
2

このコード:

public Phone(string personalPhone)
    : this(personalPhone, string.Empty)

2 つの文字列引数を取るコンストラクタを探しています。

コードの部分

this(personalPhone, string.Empty)

これは、「引数リストで 2 つの引数 (この場合は 2 つの文字列) を受け取る同じクラスのコンストラクターを探し、そのコンストラクターを呼び出す」ことを意味します。

ただし、定義しません。次のように、代わりに 3 つの文字列引数を取るものを使用できます。

public Phone(string personalPhone)
    : this(personalPhone, string.Empty, string.Empty)
于 2012-08-03T20:18:41.543 に答える
2

次の 3 つのコンストラクターがあります。

public Phone()            

public Phone(string personalPhone)
    : this(personalPhone, string.Empty)     //<---Problem is HERE...

public Phone(string personalPhone, string otherPhone, string privatePhone)

これらはいずれも2 つの文字列を取らないため、エラーが発生します。

3 番目の文字列を渡すことで、おそらく修正できます。

public Phone(string personalPhone)
    : this(personalPhone, string.Empty, string.Empty)

次に、最後のコンストラクターにチェーンします。

代わりに、単一のコンストラクターでオプションの引数を使用することも検討できることに注意してください。

public Phone(string personalPhone, string otherPhone = "", string privatePhone  = "")

これにより、「余分な」連鎖コンストラクターを排除できます。

于 2012-08-03T20:18:49.153 に答える
1

あなたのクラスには 3 つのコンストラクタしかなく、2 つの引数を取るものはありません。基本クラスの初期化が次のようになることを意味していると思います:

    : this(personalPhone, string.Empty, string.Empty)

(3 引数のコンストラクターに連鎖することに注意してください)。

于 2012-08-03T20:19:09.500 に答える