冗長なキャストは最適化されますか? コンパイラが不要なダウンキャスト (つまりcastclass
) を最適化していないことがわかります。しかし今、私はより単純なケースに興味があります。この質問は参照タイプのみに関係し、 には関係ありませんboxing
。
upcast
それはILを生成しないように思われるため、冗長な明示的なupcast
コストはまったくかかりませんか? upcast
または、IL 命令は型がないため、舞台裏で冗長な明示的なパフォーマンス コストが依然として存在しますか?
または、upcast は時々 IL 命令を生成しますか?
class Foo
{
}
class Bar : Foo
{
}
bool Test(object x)
{
return x == null;
}
void Main()
{
var x = new Bar();
Console.Write(Test((Foo)x)); // redundant explicit to Foo, and then implicit to Object
var y = new Bar(); // implicit to Object
Console.Write(Test(y));
}
IL_0000: newobj UserQuery+Bar..ctor
IL_0005: stloc.0 // x
IL_0006: ldarg.0
IL_0007: ldloc.0 // x
IL_0008: call UserQuery.Test
IL_000D: call System.Console.Write
IL_0012: newobj UserQuery+Bar..ctor
IL_0017: stloc.1 // y
IL_0018: ldarg.0
IL_0019: ldloc.1 // y
IL_001A: call UserQuery.Test
IL_001F: call System.Console.Write