当前位置:  开发笔记 > 编程语言 > 正文

你怎么称呼改变其类的对象的方法?

如何解决《你怎么称呼改变其类的对象的方法?》经验,为你挑选了2个好方法。

假设你有一个Person对象,它有一个方法promote(),将它转换为一个Captain对象.你怎么称呼这种方法/互动?

它也感觉像是反转:

myCaptain = new Captain(myPerson);

编辑:感谢所有的回复.我遇到这种模式的原因(在Perl中,但在任何地方相关)纯粹是为了方便.在不知道任何实现交易的情况下,你可以说这个Captain类"有一个" Person(我意识到这可能不是最好的例子,但要确保它不是一个子类).

实施我假设:

// this definition only matches example A
Person.promote() {
  return new Captain(this)
}

personable = new Person;

// A. this is what i'm actually coding
myCaptain = personable.promote();

// B. this is what my original post was implying
personable.promote(); // is magically now a captain?

所以,从字面上看,它只是构建一个方便的方法Captain.我只是想知道这种模式是否在野外被看到并且它是否有名字.而且我猜是的,它并没有真正改变课程,因为它返回了另一个课程.但它理论上可以,因为我并不真正关心原作.

Ken ++,我喜欢你指出一个用例.有时候改变某些东西真的很棒,比如一个记忆敏感的环境.



1> strager..:

对象的方法不应该改变它的类.您应该有一个返回新实例的成员:

myCaptain = myPerson->ToCaptain();

或者使用构造函数,如示例所示:

myCaptain = new Captain(myPerson);

我将其称为转换,甚至是转换,具体取决于您如何使用该对象.如果您有一个值对象:

Person person;

您可以使用构造函数方法隐式转换:

Captain captain = person;

(这是假设C++.)



2> Brian..:

一个更简单的解决方案可能是将排名作为人的财产.我不知道您的数据结构或要求,但如果您需要尝试打破语言基础知识的东西,可能有更好的方法来实现它.

推荐阅读
Life一切安好
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有