我正在重新提出一个我刚问过的问题,但是想以更简洁的方式重新提出这个问题,因为我认为这引起了一些混乱.
我有一个基类:RoomObject.我有两个子类:Bed和Table,它继承自RoomObject.
我有一个变量currentObject,它是RoomObject类型,但实际上将持有Bed或Table的实例(RoomObject永远不会实例化).
如何在不知道其完整类型的情况下克隆我的currentObject?
即如果currentObject是一张床,我想用克隆床
currentObject = new Bed(currentObject);
Run Code Online (Sandbox Code Playgroud)
如果currentObject是一个表,我想使用
currentObject = new Table(currentObject);
Run Code Online (Sandbox Code Playgroud)
我可以通过调用Activator.CreateInstance(currentObject.GetType())来使用反射,然后复制我需要的任何属性,但这看起来很混乱.
您应该使用称为虚拟构造函数的模式或克隆方法.
添加一个虚方法RoomObject,返回当前对象的副本:
abstract RoomObject Clone();
Run Code Online (Sandbox Code Playgroud)
现在实现此方法Bed返回new Bed(...),并在Table返回new Table(...).传递构造函数所需的任何参数,Bed并Table复制当前对象中的内容.
.NET有一个ICloneable通常用于实现此模式的接口.这种方法的一个小缺点是Clone必须返回object,不是RoomObject,所以如果你需要RoomObject,你需要抛出它.
| 归档时间: |
|
| 查看次数: |
475 次 |
| 最近记录: |