转换代码应属于哪个类?

时间:2012-04-02 15:53:33

标签: oop class type-conversion

如果我想从课程Foo投射到另一个课程Bar,转换代码是否属于FooBar类?

Foo f

Bar b = f.ToBar()

或者:

Foo f

Bar b = Bar.FromFoo(f)

后者可以重写为构造函数而不是静态方法,但这不是这个问题的重点。

当然,在许多情况下,无法修改其中一个类会为您做出决定。例如,如果我有一个自定义类Foo并想将其转换为整数。

2 个答案:

答案 0 :(得分:2)

你可以这样看待它:关注的是转换?如果Foo知道或关心其他一些名为Bar的类,是否在某些方面使用它?当然不是。因为,如果有许多其他类以各种方式使用Foo,那么Foo应该继续并照顾它们呢?没有。 因此,首要的一点是,必须在Bar方面实现此功能。然后,问题是次要的:如何实现它。在这里,正如其他人所指出的那样,将其作为构造函数实现,更符合逻辑,并且符合oop原则。

答案 1 :(得分:1)

操作通常应该依赖于它所影响的对象,所以在这种情况下它将是f.ToBar()。