次のコードは、私が書いているプログラムの簡単な例です。
public class Y
{ }
public class X : Y
{ }
public class W : Y
{ }
public interface IAaa<T>
where T : Y
{
void Execute(T ppp);
}
public abstract class Aaa<T> : IAaa<T>
where T : Y
{
public abstract void Execute(T ppp);
}
public class Bbb : Aaa<X>
{
public override void Execute(X ppp)
{ }
}
public class Ccc : Aaa<W>
{
public override void Execute(W ppp)
{ }
}
public class Factory
{
public static IAaa<Y> Get(bool b)
{
if(b)
return new Bbb();
else
return new Ccc();
}
}
class Program
{
static void Main(string[] args)
{
IAaa<Y> aa;
aa = Factory.Get(true);
}
}
コンパイルすると、次のエラーが発生します
エラー CS0266: 型 'ConsoleApplication3.Bbb' を 'ConsoleApplication3.IAaa' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)
エラー CS0266: 型 'ConsoleApplication3.Ccc' を 'ConsoleApplication3.IAaa' に暗黙的に変換できません。明示的な変換が存在します (キャストがありませんか?)
それを機能させる方法はありますか?