使用索引引用另一个类vs存储整个实例

时间:2018-09-23 22:49:18

标签: oop language-agnostic

在一个需要“包含”另一个类的信息的类中(抱歉,我不知道该术语),我应该将对该另一个类的引用存储为整数/ id之类的东西,还是应该存储它作为另一个类的实例?如果有名字叫什么呢?

作为一个非常基本的示例,我们想要在其中存储用户最喜欢的餐厅的应用程序:

testcase07.c

注意:如果您认为这是题外话,请解释为什么允许这个问题,并且是一个高度评价/有用的问题,但是我的却不是:Interface vs Base class或者至少告诉我这是什么因此,我可以自己进行更多研究。据我从Stackoverflow的FAQ所知道的,这个问题是关于主题的。

1 个答案:

答案 0 :(得分:1)

您的第一个变体

public int favoriteRestaurantId { get; set; }
如果仅对id对象的name而不是其他属性(restaurant)感兴趣,那么

才有意义。否则,您将需要一些外部容器来存储所有restaurant对象,并且必须使用给定的restaurant在容器中搜索id

您的第二个变体

public Restaurant favoriteRestaurant { get; set; }

如果你写

someUser.favouriteRestaurant = someRestaurant;

这还将存储对现有someRestaurant的引用。它将复制整个对象。至少不是像C#和Java这样的语言。

仅当您执行类似操作

someUser.favouriteRestaurant = new Restaurant(someRestaurant);

user将拥有自己的restaurant对象的副本。

在某些情况下,这是有道理的,但在您的示例中,由于两个原因,这可能不是一个好主意:

  1. 例如,如果name中的someRestaurant发生了变化,这也应该更改favouriteRestaurant的名称。如果favouriteRestaurant是副本,则不会自动发生。

  2. 这是浪费内存。