在接口中实现接口属性
本文关键字:接口 属性 实现 | 更新日期: 2023-09-27 18:13:25
我需要创建一个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);
}
但是这个cast: (ITest<IClassA>)t
会产生一个运行时错误。我怎么解它?谢谢!
您应该将Test
声明为
public class Test : ITest<IClassA>
代替ITest<ClassA>
。
或者声明ITest<TClassA>
在TClassA
上协变:
public interface ITest<out TClassA> where TClassA : IClassA
Test
-class实现了具体的 ClassA
(public class Test : ITest<ClassA>
)。
所以你试图将ITest<ClassA>
转换为ITest<IClassA>
,这显然失败了。
如果让Test
类实现IClassA
,则强制转换工作:
public class Test : ITest<IClassA>
{
public IClassA A
{
get; private set;
}
public Test(IClassA a)
{
this.A = a;
}
}