gpt4 book ai didi

c# - 从父对象创建子对象实例的最佳方法

转载 作者:IT王子 更新时间:2023-10-29 04:30:20 26 4
gpt4 key购买 nike

我正在从父对象创建子对象。所以场景是我有一个对象和一个子对象,它们为我想要搜索的场景添加了一个距离属性。我选择使用继承,因为我的 UI 可以等效地处理搜索对象或不是位置搜索结果的对象列表。所以在这种情况下继承似乎是一个明智的选择。

目前我需要从 MyObject 实例生成一个新对象 MyObjectSearch。目前,我通过一个一个地设置属性在构造函数中手动执行此操作。我可以使用反射,但这会很慢。有没有更好的方法来实现这种对象增强?

希望我下面的代码能说明这个场景。

public class MyObject {

// Some properties and a location.
}

public class MyObjectSearch : MyObject {

public double Distance { get; set; }

public MyObjectSearch(MyObject obj) {
base.Prop1 = obj.Prop1;
base.Prop2 = obj.Prop2;
}
}

还有我的搜索功能:

public List<MyObjectSearch> DoSearch(Location loc) { 
var myObjectSearchList = new List<MyObjectSearch>();

foreach (var object in myObjectList) {
var distance = getDistance();
var myObjectSearch = new MyObjectSearch(object);
myObjectSearch.Distance = distance;
myObjectSearchList.add(myObjectSearch);
}
return myObjectSearchList;
}

最佳答案

基类需要定义一个拷贝构造函数:

public class MyObject
{
protected MyObject(MyObject other)
{
this.Prop1=other.Prop1;
this.Prop2=other.Prop2;
}

public object Prop1 { get; set; }
public object Prop2 { get; set; }
}

public class MyObjectSearch : MyObject
{

public double Distance { get; set; }

public MyObjectSearch(MyObject obj)
: base(obj)
{
this.Distance=0;
}
public MyObjectSearch(MyObjectSearch other)
: base(other)
{
this.Distance=other.Distance;
}
}

这样,所有派生类的属性设置都由基类处理。

关于c# - 从父对象创建子对象实例的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20842099/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com