【发布时间】:2018-02-03 22:11:15
【问题描述】:
我有 2 个类包含另一个的类属性。
public class Client
{
public Customer Customer { get; set; }
public Client()
{
}
}
public class Customer
{
public Client Client { get; set; }
public Customer(int id)
{
// some retrieval logic by using id ...
}
}
这是一个工厂类,它显示了如果我在编译时间之前就知道对象,我正在尝试实现的概念。实际上,我不需要也必须通过用户提供的数据的反射来实例化它们。现在考虑到这一点,我希望将相反类的对象属性分配给先前为该其他类创建的对象(即如下所示)
public class Factory
{
public Factory()
{
// this is all done via reflection at run-time in my real code
Client client = new Client();
client.Customer = new Customer(1); // id would be retrieve from a client property (not shown for simplicity sake)
client.Customer.Client = client; // refer to the first object of client
}
}
但是,利用之前提供的工厂类示例,我的代码中的客户端对象不在范围内,或者在堆栈上更高(各种属性是递归实例化的,如果更高的类具有相同类型的属性)跳过它的子后续类/对象(以避免无限递归)。
如何在工厂方法中利用类名或任何对象的属性将属性指向先前实例化的对象,而该对象可能不在范围内?
我正在考虑使用列表/字典来存储更高级别的对象引用并通过递归将它们向下传递并检查对象的类型是否与子后续属性的类型匹配,然后仅使用存储在该属性的列表/字典。我想看看这是最好的方法还是有其他方法。
这纯粹是理论上的,可能会也可能不会被使用。目标是从这些类创建任何时间和对象,所有相关类在第一个对象中都有属性,其中包含相关类的实例化实例,这些实例永远不会为空/不会无限回避。
【问题讨论】:
-
答案就在问题中。
-
@Guillaume 谢谢,我知道,但我只是想知道这是最好的方法还是有更好的方法。
标签: c# asp.net oop object recursion