私には2つのインターフェースがあり、そのうちの1つはジェネリックであり、2番目のインターフェースから派生したタイプのみを許可します。彼らはこのように見えます:
public interface IProvider<T> where T : IContent
{
T getContent(int i);
void addContent(T content);
}
public interface IContent
{
string whatIAm();
}
もちろん、私の実際のインターフェースはもっと複雑ですが、私の問題が何であるかを示すには十分です。今、私は各インターフェースに具体的なクラスを持っています:
public class Provider : IProvider<FileContent>
{
public FileContent getContent(int i)
{
return null;
}
public void addContent(FileContent content)
{
}
}
public class FileContent : IContent{
public string whatIAm(){
return "FileContent";
}
}
そして私のコードでは、参照タイプ「IProvider」を使用したいのですが、キャストがうまくいきません...この例を見てください:
static void Main(string[] args)
{
Provider p = new Provider(); //works
IProvider<FileContent> pp = p as IProvider<FileContent>; //also works
IProvider<IContent> ppp = pp as IProvider<IContent>; //fails :(
}
ppp
常にnullです。このキャストが機能していることを変更するにはどうすればよいですか?前もって感謝します。