如果我想从课程Foo
投射到另一个课程Bar
,转换代码是否属于Foo
或Bar
类?
Foo f
Bar b = f.ToBar()
或者:
Foo f
Bar b = Bar.FromFoo(f)
后者可以重写为构造函数而不是静态方法,但这不是这个问题的重点。
当然,在许多情况下,无法修改其中一个类会为您做出决定。例如,如果我有一个自定义类Foo
并想将其转换为整数。
答案 0 :(得分:2)
你可以这样看待它:关注的是转换?如果Foo知道或关心其他一些名为Bar的类,是否在某些方面使用它?当然不是。因为,如果有许多其他类以各种方式使用Foo,那么Foo应该继续并照顾它们呢?没有。 因此,首要的一点是,必须在Bar方面实现此功能。然后,问题是次要的:如何实现它。在这里,正如其他人所指出的那样,将其作为构造函数实现,更符合逻辑,并且符合oop原则。
答案 1 :(得分:1)
操作通常应该依赖于它所影响的对象,所以在这种情况下它将是f.ToBar()。