有人可以向我解释为什么这在 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 “可输出”,则其模板类型必须实现特定接口。