我有一组嵌套类,如下所示:
class A_Class
{
...
}
class B_Class
{
...
List<A_Class> A_List
}
class C_Class
{
...
List<B_Class> B_List
B_Class Selected_B
}
class D_Class
{
...
List<C_Class> C_List
}
这些包含一些非常复杂的lambda逻辑,但每个类只需要少量输入和输出。我现在需要这个对象的不同实现,没有所有复杂的逻辑,只有字段,所以可以设置预期的输出。
但是我也有一些方法可以读取上述类的输出,这些方法也需要能够从新的实现中读取。
所以我的接口如下:
interface A_Interface
{
...
}
interface B_Interface
{
...
List<A_Interface> A_List
}
interface C_Interface
{
...
List<B_Interface> B_List
B_Interface Selected_B
}
interface D_Interface
{
...
List<C_Interface> C_List
}
并在类之上进行更改以实现这些接口
class A_Class : A_Interface
{
...
}
class B_Class : B_Interface
{
...
List<A_Class> A_List
}
class C_Class : C_Interface
{
...
List<B_Class> B_List
B_Class Selected_B
}
class D_Class : D_Interface
{
...
List<C_Class> C_List
}
这给出了返回类型的问题,遗憾的是,这些类的原始开发人员具有彼此耦合的类的实现,我不能将例如List<B_Class> B_List
更改为List<B_Interface> B_List
而不暴露在该接口中大量特定于原始实现的字段。
我尝试过使用泛型的解决方案:
interface Interface_D<Type_C, Type_B, Type_A> where Type_C : Interface_C<Type_B, Type_A> where Type_B : Interface_B<TypeA> where TypeA : Interface_A
{
List<Type_C> C_List
}
interface Interface_C<Type_B, Type_A> where Type_B : Interface_B<TypeA> where TypeA : Interface_A
{
List<Type_B> B_List
Type_B Selected_B
}
interface Interface_B<Type_A> where Type_A : Interface_A
{
List<Type_A> A_List
}
class A_Class : Interface_A {...}
class B_Class : Interface_B<A_Class> {...}
class C_Class : Interface_C<B_Class,A_Class> {...}
class A_Class : Interface_D<C_Class,B_Class,A_Class> {...}
这可以让我编译。但是当消耗顶级类(D_Class)时,我必须声明它:
Interface_D<Interface_C<Interface_B<Interface_A>, Interface_A>, Interface_B<Interface_A>, Interface_A> Obj;
我可以使用另一个扩展这些乱码/类型的接口来解决这个问题。
Interface_DBase : Interface_D<Interface_C<Interface_B<Interface_A>, Interface_A>, Interface_B<Interface_A>, Interface_A>
但是我仍然无法将D_Class<C_Class,B_Class,A_Class>
(现有实现)的实例强制转换为Interface_DBase
以便使用它。
那么有没有办法做这个演员?或者甚至更好地避免在接口中完全拥有所有这些嵌套类型参数?我希望我的手上有一个XY问题,并且有一个正确的方法来实现这个我没有偶然发现。