c# - 原型(prototype)设计模式

标签 c# design-patterns

为什么我需要使用原型(prototype)设计模式?取而代之的是,我可以直接分配该值吗?例如

根据原型(prototype)设计模式,我们必须像这样克隆:

Typist typistCopy = (Typist)typist.Clone();

同样我可以这样做:

Typist typistCopy = typist; 

原型(prototype)设计模式在这里的重要性是什么?

最佳答案

您演示的两个操作执行不同的操作。您需要哪一个取决于您想要做什么。

不会创建对象的副本/克隆:

Typist typistCopy = typist;

它所做的一切都是创建一个新的变量,它引用内存中的相同对象。执行该行代码后,您仍然只有 一个 Typist 对象。您只有两个变量引用它。对一个变量所做的任何更改都会反射(reflect)在两个变量中,因为它们都引用同一个对象。

另一方面,这会创建对象的副本克隆:

Typist typistCopy = (Typist)typist.Clone();

(或者,至少,允许对象自己决定是否需要复制/克隆,并执行自己的封装逻辑来确定这对对象意味着什么。)

执行该行代码后,您现在有 两个 Typist 对象,它们可以彼此独立地使用和操作。对一个变量所做的任何更改都不会反射(reflect)在另一个变量中,因为它们引用不同的对象。

关于c# - 原型(prototype)设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55829213/

相关文章:

c# - 如何使用 WPF 搜索数据库并将结果显示在 DataGrid 中

c# - 如何在父窗体的控件中访问用户定义的控件

design-patterns - 模板方法和策略模式有什么区别?

design-patterns - JDK中使用的设计模式示例

web-services - 使用不同版本的 Web 服务的设计模式?

c# - 使用 DataGrid 的 EnumerableCollectionView 到 ListCollectionView

javascript - 如何使用 QueryString 获取 TextBox 的文本并将其从 JavaScript 发送到代码隐藏

c# - 如何使用 c# 在 asp.net 中的数据库中在我的网页中显示我的 docx 文件数据?

C++11 可重入类锁定策略

c# - 在ASP.NET C#项目中实现异常处理