0

いくつかの引数 (args1,args2) を渡して、クラス A からクラス B のコンストラクターを呼び出そうとしています。私はこのようなものを使用しています:

public class A
{
       private readonly B _b;
       public A()
       {
         _b=new B(TypeA args1,TypeB args2);
       }

...
}

public class B
{

   public B(TypeA  new_args1,TypeB new_args2)
   {
     ...
   }

...
}

しかし、args1 と args2 には送信したい正しい値がありますが、デバッグで見たところ、new_args1 と new_args2 は変更されません。そのために使用する必要がある特定の構文はありますか?

4

3 に答える 3

2

B のコンストラクターの引数を "new" と呼ぶ理由がわかりません。それらはその特定のオブジェクト インスタンスをインスタンス化するための引数です。

引数の宣言で型が欠落しているという事実を除けば、コードは正しいように見えます。正確には何が間違っていますか。

public B(new_args1,new_args2)

タイプがありません。

public B(int new_args1, int new_args2)

上記のタイプの仮定を考えると

_b=new B(42, 24);

B は次のように初期化されます。

public B(int new_args1, int new_args2)
{
    // new_args1 has the value 42
    // new_args2 has the value 24
}

これらの値を B のどこかに割り当てると仮定します。

public class B 
{
    public int A1 { get; private set; }
    public int A2 { get; private set; }
    public B(int new_args1, int new_args2)
    {
        // new_args1 has the value 42
        A1 = new_args1;
        // new_args2 has the value 24
        A2 = new_args2;
    }
}

それから

_b.A1 

値は 42 になり、

_b.A2

値は 24 になります

_b を初期化した後。

于 2012-07-30T14:39:30.637 に答える
1

まず、構文を修正しましょう。

public class A
{
    private readonly B _b;
    public A(TypeA args1, TypeB args2)
    {
        _b = new B(args1, args2);
    }

}

public class B
{
    public B(TypeA new_args1, TypeB new_args2)
    {

    }

}

引数のタイプは完全に一致する必要があることに注意してください。一致しない場合、署名が一致する別のコンストラクターが呼び出される可能性があります。Bこの場合、2つのコンストラクターがオンになっているとしましょう。最初のコンストラクターは呼び出され、2番目のコンストラクターは呼び出されません。

public class B
{
    public B(TypeA new_args1, TypeB new_args2)
    {

    }

    public B(TypeA new_args1, TypeC new_args2)
    {

    }

}

もう1つのポイント:この場合、DI(依存性注入)を使用します。構築されたオブジェクトがなどListのアトミックデータ構造でない限り、コンストラクタで構築を行うことは欠陥です。Dictionary

public class M
{
    public void Main(TypeA new_args1, TypeB new_args2)
    {
        var b = new B(new_args1, new_args2);
        var a = new A(b);
    }
}


public class A
{
    private readonly B _b;
    public A(B b)
    {
        _b = _b;
    }

}

public class B
{
    public B(TypeA new_args1, TypeB new_args2)
    {

    }
}
于 2012-07-30T14:52:47.100 に答える
0

コードでエラーが表示されるのは、 A コンストラクターを括弧付きで宣言する必要があることです。つまり、 A() 、それが機能するかどうかを確認してください。それに加えて、コードは完全に正しいように見えます。

于 2012-07-30T14:45:33.910 に答える