1

以下のようなクラスを実装しました。

public class Person
{
    public int d, e, f;
    public Person()
    {
    }

    public Person(int a)
    {
    }

    public Person(int a, int b)
    {
        new Person(40, 6, 8);
    }

    public Person(int a, int b, int c)
    {
        d = a; e = b; f = c;
    }
}   

public  class Program
{
    static void Main(string[] args)
    {
        Person P = new Person(100, 200);

        Console.WriteLine("{0},{1},{2}", P.d, P.e, P.f);// it prints 0,0,0
    }
}

ここで、2 つの引数を使用して Person クラスのインスタンスを作成すると、d、e、f の値を設定できません。これは、3 番目のコンストラクターで Person の新しいオブジェクトがまとめて宣言されているためです。

したがって、前のオブジェクトはこの新しいオブジェクトについて何も知りません。

この新しいオブジェクトを取得して、そこから d、e、f に値を割り当てる方法はありますか?

4

4 に答える 4

7

あるコンストラクターが別のコンストラクターに引数を渡すように、実際にコンストラクターをチェーンしようとしていると思います。

public Person(int a, int b) : this(40, 6, 8)
{
}

あなたが無視しているのは奇妙ですab...通常は1つの値をデフォルトにするだけです。

public Person(int a, int b) : this(a, b, 8)
{
}

詳細については、コンストラクター チェーンに関する私の記事を参照してください。

于 2013-05-16T14:02:42.810 に答える
3
    public Person()
       : this(0,0,0)
    {
    }
    public Person(int a)
       : this(a,0,0)
    {
    }
    public Person(int a, int b)
       : this(a,b,0)
    {
    }
    public Person(int a, int b, int c)
    {
        d = a; e = b; f = c;
    }
于 2013-05-16T14:03:16.000 に答える
1

an のデフォルト値intは 0int?です。値があるかどうかを使用してテストします。

例えば

var d = P.d.HasValue ? P.d : "";
var e = P.e.HasValue ? P.e : "";
var f = P.f.HasValue ? P.f : "";
Console.WriteLine("{0},{1},{2}", d, e, f);
于 2013-05-16T14:02:46.170 に答える
1

あなたはこれを書くことができます

    public Person(int a, int b)
        : this(40, 6, 8)
    {
    }

他のコンストラクターを呼び出します。

于 2013-05-16T14:06:18.293 に答える