私は理解できず、答えも見つけられない奇妙な振る舞いに遭遇しました。私に変数がスコープの外に型を持っています
private void SomeMethod(BaseClass obj)
{
if (obj.GetType() == typeof(SubClass1))
{
var variable = (SubClass1) obj;
}
else if (obj.GetType() == typeof(SubClass2))
{
var variable = (SubClass2) obj;
}
}
variable
の2つの宣言が異なるスコープにあるようだとそのvar
は、実際の種類に応じてSubClass1
またはSubClass2
のいずれかで次のようになります。BaseClass
にSubClass1
とSubClass2
いるサブクラスで、私は方法を持っていますobj
が送信されます。
SubClass2
のオブジェクトでこのメソッドを呼び出すと、else節のBaseClass
からSubClass2
へのキャストは常にnullを返します。私はvariable
宣言のいずれかに到達する前に、すなわち
私はすぐにメソッドを入力するときにことを確認コードをデバッグ、variable
はobj
リターンのキャストがヌル理由であるofcourceタイプSubClass1
です。
variable
が宣言される前に誰がその理由を教えてもらえますか?私に
'このメソッドをSubClass2型のオブジェクトで呼び出すと、else節のBaseClassからSubClass2へのキャストは常にnullを返します。これは不可能です。そのような状況では、決して*決して*無効にはなりません。 – Servy
これはデバッガの動作であり、コードではありません。これらは別々のスコープで、異なるタイプの2つの別個の変数です。あなたのコードは別の方法ではコンパイルされませんでした。他に何かが起こっている。 – dasblinkenlight
@Igor型が最初にチェックされるので、コードはキャストに失敗することはありません。 – Servy