初始化需要彼此作为参数的2个对象

时间:2015-05-16 08:34:53

标签: c# oop

我的代码遵循模板:

class A
{
    private B _b;

    public A(B b)
    {
        _b = b;
    }
}

class B
{
    private A _a;

    public B(A a)
    {
        _a = a;
    }
}

这被认为是不好的设计吗? 除了在B中添加void SetA(A a)之类的方法之外,初始化两个类的最简单方法是什么?

1 个答案:

答案 0 :(得分:3)

  

这被认为是不好的设计吗?

谁知道(这取决于您的实际使用情况...),但如果您的代码与您的代码段相似,那么您可能会尝试使用composition而不是inheritance,继承会更好。

考虑以下句子:

  • 狼有动物(真的吗?)。
  • 汽车有引​​擎(真的!);
  • 办公椅有一把椅子(真的吗?)。
  • ......等等。

实际上我怀疑B可能有A,但我确定B可能是A

另一方面,如果您使用AB类标识符只是为了向我们展示代码示例,但在您的代码中,您的类不能用表示是动词(例如BA),那么您的设计可能就是正确的轨道。

BTW,如果AB 1:1 关联,其中一个A有一个B和一个{{1如果关联有意义,它本身并不是一个糟糕的设计...例如,B实体有一个A,并且有一个User UserProfile拥有所有者UserProfile

User
  

除了添加一个类之外,初始化两个类的最简单方法是什么   像B中的void SetA(A a)这样的方法

最简单的方法是使用读写属性(即getter和setter的属性),并在类已经实例化后设置它们,或者使用构造函数。实际上没有最简单的方式,但根据您的实际使用情况,最合适的方式

摘要

如果您可以使用动词来表达类关系(即public class User { public UserProfile Profile { get; set; } } public class UserProfile { public User OwnerUser { get; set; } } Cat),则使用继承,而当您表达时可以使用合成 - 使用具有动词的关系(即AnimalHouse)。

相关问题