これはキャスティングに関する非常にばかげた質問のようですが...
私は次の設定をしています:
メインクラスから派生したクラスがいくつかあります。時間と空間のある時点でアイテムを取得し、それをサブクラスのオブジェクトとして処理したいと考えています。
想定:
class subClassA : mainclass
class subClassB : mainclass
今、私はそれがどのクラスであるかを尋ねる場合があります:
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ;
}
ほとんどのサブクラスでは正しいオブジェクトが返されますが、1 つのサブクラスについてはnull
-Object を取得します。
私が次のことをした場合:
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA
object test = someObject as subClassA; // <- object is not null
// or
subClassA aB = (subClassA)someObject; // <- object is not null, shows the correct object
}
と に結果がtest
ありaB
ます。
私が理解していないこと:
なぜas
失敗し、プレフィックスキャストが成功するのですか?
今、私は完全に迷っています。
if(someObject is subClassA)
{
subClassA aA = someObject as subClassA ; // <- aA = null; someObject is shown in debugger as object of subClassA
subClassA aB = someObject as subClassA ; // <- aB != null.
}
if(someObject is subClassA)
{
subClassA aB = someObject as subClassA ; // <- aB != null.
}
名前 aA はローカルで定義されています。メソッドにアクセスするスレッドは 1 つだけです。aAの名前を変更するだけで機能します。