C#从属性列表中引用外部类
鉴于以下类别:C#从属性列表中引用外部类,c#,class,oop,object,C#,Class,Oop,Object,鉴于以下类别: class OrderHeader { public int orderNo; public List<OrderDetail> dtlRows = new List<OrderDetail>(); } class OrderDetail { public int rowNo; public string info; } 例如: OrderHeader h = new OrderHeader(); h.orderNo =
class OrderHeader
{
public int orderNo;
public List<OrderDetail> dtlRows = new List<OrderDetail>();
}
class OrderDetail
{
public int rowNo;
public string info;
}
例如:
OrderHeader h = new OrderHeader();
h.orderNo = 12345;
OrderDetail d = new OrderDetail();
d.rowNo = 1;
d.info = "Test Row";
d.parentHdrRecord = h;
h.dtlRows.Add(d);
这是一个糟糕的表格吗?执行内存方面的操作代价高吗?让对象相互引用被认为是一种不好的做法,因为这被认为是一种循环依赖。。。然而;如果您首先使用实体框架代码,这几乎正是您在数据库中实现一对多关系的方式。让对象相互引用被认为是一种不好的做法,因为它被认为是一种循环依赖关系。。。然而;如果您首先使用实体框架代码,这几乎正是您在数据库中实现一对多关系的方式 这是一个糟糕的表格吗 仅当类
OrderHeader
和OrderDetail
位于不同的项目中时,才可能在Visual Studio中出现“循环依赖项”错误。如果两者都在同一个项目中,那么就可以了
做记忆方面的事情是昂贵的吗
不是。它只是一个引用-64位(或32位,取决于目标平台)。相同的内存大小,如long
number
但是,这取决于您的应用程序逻辑:
如果OrderDetail
有自己的生命周期,则不再需要它的父级。但是您没有执行orderDetail.parentHdrRecord=null,那么垃圾收集器将不会删除父级以及所有未使用的子级
这是一个糟糕的表格吗
仅当类OrderHeader
和OrderDetail
位于不同的项目中时,才可能在Visual Studio中出现“循环依赖项”错误。如果两者都在同一个项目中,那么就可以了
做记忆方面的事情是昂贵的吗
不是。它只是一个引用-64位(或32位,取决于目标平台)。相同的内存大小,如long
number
但是,这取决于您的应用程序逻辑:
如果
OrderDetail
有自己的生命周期,则不再需要它的父级。但是您没有执行orderDetail.parentHdrRecord=null,那么垃圾收集器将不会删除父级以及所有未使用的子级为什么不在细节上添加OrthNo呢?您可以考虑嵌套类,用父类的Cto-PARAM(存储引用),因为您可以很容易地访问父成员的私有成员,例如,可以获得行索引,在运行时,将方法调用到父节点中,而不是将其存储为数据成员,如果项目被移动,那么它可能会失去同步。例如,如果它的唯一性,为什么不添加OrthNo?您可以考虑这种情况下的嵌套类,用父节点的Cto-PARAM(存储引用)。因为您可以轻松访问父级的私有成员,例如,在运行时通过方法调用父级来获取行索引,而不是将其存储为数据成员,例如,如果项目被移动,可能会失去同步。这就是我的想法。我曾经在实体框架中看到过这样的操作,我想知道在常规类中这样做是否是一种不好的做法。这就是我的想法。我曾在实体框架中看到过这种做法,我想知道使用常规类是否是一种不好的做法。。。在C语言中,你显然可以弯曲/打破规则,但在F语言中试试这个。此外,诸如NDepend之类的工具将标记这些对象。我不是说你做不到,因为很明显你可以。他问这是不是糟糕的形式/黑客行为,我只是建议遵循严格、统一的指导方针,是的。但是,就像我提到的,即使是EF也违反了规则。“被认为是循环依赖”。。。在C语言中,你显然可以弯曲/打破规则,但在F语言中试试这个。此外,诸如NDepend之类的工具将标记这些对象。我不是说你做不到,因为很明显你可以。他问这是不是糟糕的形式/黑客行为,我只是建议遵循严格、统一的指导方针,是的。但是射击,即使是EF也违反了我提到的规则。
OrderHeader h = new OrderHeader();
h.orderNo = 12345;
OrderDetail d = new OrderDetail();
d.rowNo = 1;
d.info = "Test Row";
d.parentHdrRecord = h;
h.dtlRows.Add(d);