1

thisクラス型のパラメータを受け入れないのはなぜですか? それについて何を読むことができますか?ここに私の役に立たないコードがあります

using System;

public class Class1
{
  public int a = 5;
}

public class Class2
{
  private readonly int num;
  Class1 obj2 = new Class1();
  public Class2(Class1 obj)
  {
    num = obj.a;
  }
  public Class2(string l) : this (Class1 obj2)
  {

  }
}
4

4 に答える 4

3

コンストラクターは のインスタンスを取るClass1ため、次を使用する必要があります。

public Class2(string l) : this (new Class1())
{
}

obj2おそらく、新しいメンバーを作成する代わりに、コンストラクター引数をメンバーに割り当てたいと思うでしょう:

public class Class2
{
    private readonly int num;
    Class1 obj2;
    public Class2(Class1 obj)
    {
        this.obj2 = obj;
        num = obj.a;
    }
    public Class2(string l) : this (new Class1()) { }
}
于 2012-12-07T08:34:04.567 に答える
2

まず、次を見てみましょう。

public Class2(string l) : this (Class1 obj2) {...}

まず、呼び出しにタイプを含めないため、次のようになります。

public Class2(string l) : this (obj2) {...}

しかし:obj2 はその時点では有効ではありません: コンストラクター (フィールド初期化子を含むようなもの) はまだ実行されていないthisため、 ( などの) のフィールドthis.objはその場所では有効ではありません。Lee が指摘するように、nullornewインスタンスを渡すだけです。

于 2012-12-07T08:35:23.510 に答える
0

クラスは別のクラスから継承できます。キーワードはクラスのthisインスタンスを参照しており、インスタンスは「開発時」には存在しません

于 2012-12-07T08:38:11.217 に答える
0

それを使用して、引数としてstring取る別のコンストラクターに渡すことはできません。Class1オブジェクトを作成する必要がありClass1ます。しかし、それには i が必要なので、butintを取るコンストラクターは使用しません。それ以外の場合は、例外をスローする可能性があるものを使用する必要があり、例外的なコンストラクターは適切な方法ではありません (回避できる場合)。stringintint.Parse

public Class2(int i)
    : this(new Class1() { a=i })
{

}
于 2012-12-07T08:39:23.353 に答える