ar.*_*dll 2 oop constructor object deep-copy
我已经学习 c# 大约 3 个月了,今天我遇到的一件事是对象上的深拷贝和浅拷贝构造函数的概念(刚刚习惯了基类、继承和实例化的概念——多态性仍然没有)老实说,它真的沉没了......我离题了)。
当看到基类(在本例中为用户类)上的深度复制构造函数时,我的第一个想法是“你到底为什么要复制一个对象?”。我看过的文章解释了如何做以及它是如何工作的,但我仍然无法找到任何实际示例来说明为什么要这样做。如果我有一个 person 类,我肯定会创建一个 person 类的新实例吗?
我很欣赏这里可能缺少一些基本的东西,但如果有人能填补空白,那就太好了。一个真实的例子来证明它的有用性会更好!干杯!
在许多情况下,您可能需要复制对象。
为方便起见:创建对象时,通常需要对其进行初始化,可以是调用方法设置值的形式,也可以是向构造函数传递参数的形式。有时,执行所有这些初始化可能需要大量工作。如果您想要一个新对象 B 与另一个对象 A 仅相差一个值,那么将 A 的副本作为 B 并更改 B 的单个值可能更容易,而不是从头开始创建 B。
因为逻辑需要它:当下棋算法想要进行下一步时,它可能会在内部制作当前棋盘的许多副本,用它可能做出的许多可能的棋步中的一个修改它们中的每一个,评估每个新棋盘板使用一些启发式,选择最好的,然后将其用作新的当前板。
防御性:当一个Person对象被要求获取它的 时DateOfBirth,它可能不一定返回对它自己的 的引用DateOfBirth,因为有人可能会改变这个对象,从而改变 Person 的DateOfBirth。所以,Person对象很可能会回到一个防守副本,它的DateOfBirth。
拍摄快照:如果我有一个要调用的事件观察者列表,我可能想在开始调用观察者之前获取列表的(浅)快照副本,因为观察者可能会在我处理事件时决定取消注册自己清单,这将带来灾难性的后果。(ConcurrentModificationException,查查。)
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |