我需要创建一个dll文件,它包含类的所有接口,但不包含任何类。因为我将这些接口用于很多类,所以它必须是这样的:
public interface IClassA
{
string Word { get; }
}
public interface ITest<TClassA> where TClassA : IClassA
{
TClassA A { get; }
}以我想要的方式实现这些接口的两个类示例:
public class ClassA : IClassA
{
public string Word
{
get;
private set;
}
public string Sentence
{
get;
private set;
}
public ClassA(string word, string sentence)
{
this.Word = word;
this.Sentence = sentence;
}
}
public class Test : ITest<ClassA>
{
public ClassA A
{
get;
private set;
}
public Test(ClassA a)
{
this.A = a;
}
}我想在主程序中做一些类似的事情:
public static void Main(string[] args)
{
ClassA a = new ClassA("hey", "hey world!");
Test t = new Test(a);
Print((ITest<IClassA>)t);
}
public static void Print(ITest<IClassA> t)
{
Console.WriteLine(t.A.Word);
}但是这个强制转换:(ITest<IClassA>)t产生了一个运行时错误。我该怎么解决它呢?谢谢!
发布于 2016-10-16 17:59:29
您应该将Test声明为
public class Test : ITest<IClassA>而不是ITest<ClassA>。
或者声明ITest<TClassA>在TClassA上是协变的
public interface ITest<out TClassA> where TClassA : IClassA发布于 2016-10-16 17:59:55
Test-class实现了具体的ClassA (public class Test : ITest<ClassA>)。
因此,您试图向ITest<IClassA>强制转换ITest<ClassA>,但显然失败了。
如果让Test-class实现IClassA,则强制转换会起作用:
public class Test : ITest<IClassA>
{
public IClassA A
{
get; private set;
}
public Test(IClassA a)
{
this.A = a;
}
}https://stackoverflow.com/questions/40068962
复制相似问题