Activator.CreateInstance を使用してクラスを作成し、それを実装する汎用インターフェイスにキャストしようとしています。
実行時に「InvalidCastException」が発生するのはなぜですか (.Net 4.0)?
コードは次のとおりです。
namespace CastingGenerics
{
class Program
{
static void Main(string[] args)
{
var typeFromSomewhere = typeof(ActionSomethingValidator);
// This line throw 'System.InvalidCastException'
// "Unable to cast object of type 'CastingGenerics.ActionSomethingValidator' to type 'CastingGenerics.IActionValidator`1[CastingGenerics.IAction]'."
var castingError = (IActionValidator<IAction>)Activator.CreateInstance(typeFromSomewhere);
}
}
internal interface IAction
{
}
internal interface IActionValidator<in T>
where T : IAction
{
bool Validate(T action, out string failure);
}
internal abstract class ActionValidator<T> : IActionValidator<T>
where T : IAction
{
public abstract bool Validate(T action, out string failure);
}
internal class ActionSomethingValidator : ActionValidator<IActionSomething>
{
public override bool Validate(IActionSomething action, out string failure)
{
failure = string.Empty;
return true;
}
}
internal interface IActionSomething : IAction
{
}
}