2

私は現在、キャスティングとボクシングに頭を悩ませようとしています。私が現在理解しているように:

  • ボクシング-値型から参照型(つまり、intからオブジェクト)
  • 開箱-参照型から値型(つまり、オブジェクトからint)
  • 型キャスト-現時点ではボクシングに似ているように見えますが、参照型をどのタイプのオブジェクトにするかを割り当てることができます。(つまり、customObjectTypeへのint)

例は、私がそれを回避しようと現在取り組んでいる例です。2つのクラスがあるとしましょう。一方のクラスのメソッドは、もう一方のクラスのコンストラクターを呼び出します。

//1st class
public class FirstClass
{
  //code for fields,constructor & other methods

  public void CallOtherClass(int firstClassID)
  {
   int x = firstClassID;
   SecondClass test = new SecondClass(x);
  }

}

//2nd class
public class SecondClass
{
   public SecondClass(FirstClass firstClass)
   {
    //set some fields
   }
} 

さて、上記のシナリオでは、CallOtherClassメソッドがSecondClassのコンストラクターを設定しようとするため問題が発生しますが、SecondClassのコンストラクターはFirstClass型のパラメーターを取り、提供できるのはintだけです。

だから私が理解しているように、これは型キャストを使用するのに良い時期でしょうか?以下のようなもの。

//1st class
public class FirstClass
{
  //code for fields,constructor & other methods

  public void CallOtherClass(int firstClassID)
  {
   int x = firstClassID;

   FirstClass a;
   a = (FirstClass)x;

   SecondClass test = new SecondClass(a);
  }

}

//2nd class
public class SecondClass
{
   public SecondClass(FirstClass firstClass)
   {
    //set some fields
   }
}

私の頭の中では、これはxの型をFirstClassの参照型に変更しているように見えます。明らかに、私の理解は、それがエラーを生成するので、線に沿ってどこかでかなり離れています

"Cannot convert type 'int' to 'Namespace.FirstClass"

何かご意見は?

4

1 に答える 1

2

型キャストはボクシングでもアンボクシングでもありませんが、どちらかを引き起こす可能性があります。はintではないためFirstClass、つまり、intは継承も拡張もしないためFirstClass、型にキャストすることはできませんFirstClass

型キャストは、可能な場合にのみ変換を引き起こします。したがって、intからdoubleに、またはその逆に移動でき、副作用が発生する可能性があります。intしかし、からに行くことはできませんFirstClass

ボクシング、ラッパーオブジェクトで値または参照型をラップします。少なくともそれは私がそれをどう思うかです。内部がどのように機能するかはわかりませんが、私の推測では、代入演算子 "="またはキャストは、ボックス化解除時にラップされた値を暗黙的に返し、ボックス化時にラッパーオブジェクトを返します。

于 2012-11-07T01:36:13.220 に答える