型制約のあるジェネリックを使用する C# コードをコンパイルしているときに、興味深い好奇心に出くわしました。説明のために簡単なテストケースを書きました。Visual Studio 2010 で .NET 4.0 を使用しています。
namespace TestCast
{
public class Fruit { }
public class Apple : Fruit { }
public static class Test
{
public static void TestFruit<FruitType>(FruitType fruit)
where FruitType : Fruit
{
if (fruit is Apple)
{
Apple apple = (Apple)fruit;
}
}
}
}
Apple へのキャストは次のエラーで失敗します:「タイプ 'FruitType' を 'TestCast.Apple' に変換できません」。ただし、as
演算子を使用するように行を変更すると、エラーなしでコンパイルされます。
Apple apple = fruit as Apple;
誰かがなぜこれが当てはまるのか説明してもらえますか?