上下文:.NET 4.0,C#
我正在创建一组接口和一组实现它们以提供一些服务的类。客户端使用具体的类,但调用使用接口作为参数类型声明的方法。
一个简化的例子是这个:
namespace TestGenerics
{
// Interface, of fields
interface IField
{
}
// Interface: Forms (contains fields)
interface IForm<T> where T : IField
{
}
// CONCRETE CLASES
class Field : IField
{
}
class Form <T> : IForm<T> where T : IField
{
}
// TEST PROGRAM
class Program
{
// THIS IS THE SIGNATURE OF THE METHOD I WANT TO CALL
// parameters are causing the error.
public static void TestMethod(IForm<IField> form)
{
int i = 1;
i = i * 5;
}
static void Main(string[] args)
{
Form<Field> b = new Form<Field>();
Program.TestMethod(b);
}
}
}
该代码对我来说很有意义,但我得到编译器错误:
参数 1:无法从 '
TestGenerics.Form<TestGenerics.Field>
' 转换为 'TestGenerics.IForm<TestGenerics.IField>
' TestGenerics
我不确定我做错了什么,我在互联网上阅读了很多页面,但没有一个能解决我的问题。
是否有一个解决方案不会修改我正在尝试构建的架构:
编辑:我设计了接口,使它们应该独立于实现它们的具体类。具体的类可以从 dll 加载,但大多数应用程序都与接口一起工作。在某些情况下,我需要使用具体的类,特别是在使用需要序列化的类时。
提前致谢。
亚历杭德罗