use*_*610 22 c# oop circular-dependency
如何解决循环引用问题,例如A类将B类作为其属性之一,而B类将A类作为其属性之一?
如何为这些问题做建筑师?
如果你举一个NHibernate的例子,对象之间会有一个父子关系.
它如何处理这些父子场景?
Ed *_*tes 29
在大多数情况下,当我必须互相引用两个东西时,我已经创建了一个删除循环引用的接口.例如:
之前
public class Foo
{
Bar myBar;
}
public class Bar
{
Foo myFoo;
}
Run Code Online (Sandbox Code Playgroud)
依赖图:
Foo Bar
^ ^
| |
Bar Foo
Run Code Online (Sandbox Code Playgroud)
Foo取决于Bar,但Bar也依赖于Foo.如果它们位于单独的程序集中,则构建时会出现问题,尤其是在执行干净重建时.
后
public interface IBar
{
}
public class Foo
{
IBar myBar;
}
public class Bar : IBar
{
Foo myFoo;
}
Run Code Online (Sandbox Code Playgroud)
依赖图:
Foo, IBar IBar
^ ^
| |
Bar Foo
Run Code Online (Sandbox Code Playgroud)
Foo和Bar都依赖于IBar.没有循环依赖,如果将IBar放在自己的程序集中,则Foo和Bar位于不同的程序集中将不再是问题.
我会告诉你的朋友他需要重新考虑他的设计.像你描述的循环引用通常是设计缺陷的代码味道.
与C++(例如)不同,C#不需要前向声明来解析循环引用.因此:
public class A
{
public B B { get;set; }
}
public class B
{
public A A { get;set; }
}
Run Code Online (Sandbox Code Playgroud)
然而,这通常是可疑设计决策的指标.
| 归档时间: |
|
| 查看次数: |
39684 次 |
| 最近记录: |