C#でこれが間違っている理由を誰かに説明してもらえますか:
namespace NamespaceA
{
public class ClassA<T1>
{
T1 mT1;
public T1 Type1
{
get { return mT1; }
}
}
public class IOForClassA
{
public interface ICanOutput
{
void OutputFunction();
}
public static void Output(ClassA<ICanOutput> aClassA_WithOutputCapabilities)
{
aClassA_WithOutputCapabilities.Type1.OutputFunction();
}
}
}
namespace NamespaceB
{
public class ClassB
{
public class OutputableClassA : NamespaceA.IOForClassA.ICanOutput
{
public void OutputFunction()
{
}
}
public ClassB()
{
NamespaceA.ClassA<OutputableClassA> aOutputableA = new NamespaceA.ClassA<OutputableClassA>();
NamespaceA.IOForClassA.Output(aOutputableA);
}
}
}
これにより、次のコンパイル エラーが発生します。
引数 1: 'NamespaceA.ClassA"<"NamespaceB.ClassB.OutputableClassA">" から NamespaceA.ClassA"<"NamespaceA.IOForClassA.ICanOutput">" に変換できません
...しかし、NamespaceB.ClassB.OutputableClassAはNameSpaceA.IoForClassA.ICanOutputを実装しているため、これが問題になる理由がわかりません...
ユーザーが希望する任意のタイプの ClassA を作成できるようにしようとしています。ただし、ClassA を「出力可能」にしたい場合は、テンプレート化された型で特定のインターフェイスを実装する必要があります。