C# 在到达方法时避免循环依赖

C# 在到达方法时避免循环依赖,c#,C#,我一直在努力解决我在依赖性方面遇到的这个问题。我需要从A类到B类以及B类到A类的参考资料。这可能吗?A持有我需要在B中使用的声明类型,因此我需要访问A到B和B到A 有没有办法解决这个问题或者有什么想法?不能移动A中的类型,也不能移动B中的方法。(否则就不会有任何问题) GUI-Factory-XMLSerialize,其中Factory是A,XML是B //关于简短的回答是否定的。你不能有循环依赖关系。您的问题的常见解决方案是将共享功能抽象为第三类,然后从a和B中引用。如果您说这不可能,那么您的

我一直在努力解决我在依赖性方面遇到的这个问题。我需要从A类到B类以及B类到A类的参考资料。这可能吗?A持有我需要在B中使用的声明类型,因此我需要访问A到B和B到A

有没有办法解决这个问题或者有什么想法?不能移动A中的类型,也不能移动B中的方法。(否则就不会有任何问题)

GUI-Factory-XMLSerialize,其中Factory是A,XML是B


//关于

简短的回答是否定的。你不能有循环依赖关系。您的问题的常见解决方案是将共享功能抽象为第三类,然后从a和B中引用。如果您说这不可能,那么您的目标可能不可能。

简短的回答是不。您不能有循环依赖关系。您的问题的常见解决方案是将共享功能抽象为第三类,然后从a和B中引用。如果您说这不可能,那么您的目标可能不可能。

这听起来不仅可能,而且很正常。例如,
人员
类可以引用
部门
类,
部门
可以引用
人员
。这方面的例子随处可见


尽量避免在
部门
中创建
人员
实例变量(属性)。您希望使引用尽可能短,以避免内存泄漏

这听起来不仅可能,而且很正常。例如,
人员
类可以引用
部门
类,
部门
可以引用
人员
。这方面的例子随处可见


尽量避免在
部门
中创建
人员
实例变量(属性)。您希望使引用尽可能短,以避免内存泄漏

此代码有循环引用,可以很好地编译:

public class A {
    B b;
}

public class B {
    A a;
}
所以我不确定到底是什么导致了你的问题。也许您正试图将A和B分别作为不同的程序集(也称为不同的DLL)?不幸的是,这是不可能的

如果你处于这种情况,那么你能做的最好的事情是:

大会1:

public interface IA { ... }
public interface IB { ... }
组件2(取决于1):

组件3(取决于组件2):

组件4(取决于1-3):


此代码具有循环引用,可以很好地编译:

public class A {
    B b;
}

public class B {
    A a;
}
所以我不确定到底是什么导致了你的问题。也许您正试图将A和B分别作为不同的程序集(也称为不同的DLL)?不幸的是,这是不可能的

如果你处于这种情况,那么你能做的最好的事情是:

大会1:

public interface IA { ... }
public interface IB { ... }
组件2(取决于1):

组件3(取决于组件2):

组件4(取决于1-3):


对于程序集是这样,但对于类不是这样。@nunzabar-循环引用,是的,好的,没问题。循环依赖(即继承),从不(类或程序集)。这对程序集是正确的,但对类不是。@nunzabar-循环引用,是的,好的,没问题。循环依赖(即继承),从不(类或程序集)。您所说的“保留声明的类型”是什么意思?当然可以声明两个方法/属性/字段相互引用的类。您所说的“保留声明的类型”是什么意思?当然可以声明两个方法/属性/字段相互引用的类。是的,我必须这样做。非常感谢您的帮助!!是的,我必须这样做。非常感谢你的帮助!!
B b = new B();
A a = new A();
b.a = a;
a.b = b;