我可能会倒退……我有一个类似于文档的类和另一个类似于模板的类。它们都继承自同一个基类,我有一个从模板(或从另一个文档,它在基类中的方法)创建新文档的方法。因此,如果我想从模板创建一个新文档,我只需实例化模板并在其上调用 GetNewDoc();
Document doc = mytemplate.GetNewDoc();
在 Document 类中,我有一个空白构造函数来创建一个新的空白文档,以及另一个接受文档 ID 的构造函数,这样我就可以从数据库中加载文档。但是,我还想要一个带有模板 ID 的构造函数。这样我可以做到
Document doc = New Document(TemplateID)
因为模板类已经有能力返回一个文档,我希望构造函数做类似的事情
Template temp = new Template(TemplateID);
this = temp.GetNewDoc();
当然,我不能这样做,因为“this”是只读的——而且感觉很奇怪。我觉得我在这里很愚蠢,所以请随意大喊:)
问题是有问题的对象非常复杂,有几个子对象集合和多个表上的数据库持久性,所以我不想复制太多代码。不过,我想我可以从模板中获取新文档,然后复制字段/属性,因为集合应该很容易遵循 - 这看起来像是重复。
更详细的代码示例:
using System;
using System.Collections.Generic;
using System.Text;
namespace Test
{
class Program
{
static void Main(string[] args)
{
// This just creates the object and assigns a value
Instance inst = new Instance();
inst.name = "Manually created";
Console.WriteLine("Direct: {0}", inst.name);
//This creates a new instance directly from a template
MyTemplate def = new MyTemplate();
Instance inst2 = def.GetInstance(100);
Console.WriteLine("Direct from template: {0}", inst2.name);
Instance inst3 = new Instance(101);
Console.WriteLine("Constructor called the template: {0}", inst3.name);
Console.ReadKey();
}
}
public class Instance
{
public string name;
public Instance(int TemplateID)
{
MyTemplate def = new MyTemplate();
//If I uncomment this line the build will fail
//this = def.GetInstance(TemplateID);
}
public Instance()
{
}
}
class MyTemplate
{
public Instance GetInstance(int TemplateID)
{
Instance inst = new Instance();
//Find the template in the DB and get some values
inst.name = String.Format("From template: {0}", TemplateID.ToString());
return inst;
}
}
}