ниже код состоит из два класса:Как я могу заставить конструктор C# быть фабрикой?
- SmartForm (простая модель класса)
- SmartForms (множественном класс, который содержит коллекцию SmartForm объектов)
Я хочу иметь возможность создавать экземпляры как особых, так и множественных классов вот так (т.е. Я не хочу фабричный метод GetSmartForm()):
SmartForms smartForms = new SmartForms("all");
SmartForm smartForm = new SmartForm("id = 34");
Чтобы закрепить логику, только множественное число класса должен иметь доступ к базе данных. Особый класс, когда его попросят создать экземпляр, просто создаст экземпляр класса множественного числа, а затем выберет один объект из коллекции множественного объекта, а станет этим объектом.
Как это сделать? Я попытался назначить объект this
, который не работает.
using System.Collections.Generic;
namespace TestFactory234
{
public class Program
{
static void Main(string[] args)
{
SmartForms smartForms = new SmartForms("all");
SmartForm smartForm = new SmartForm("id = 34");
}
}
public class SmartForm
{
private string _loadCode;
public string IdCode { get; set; }
public string Title { get; set; }
public SmartForm() {}
public SmartForm(string loadCode)
{
_loadCode = loadCode;
SmartForms smartForms = new SmartForms(_loadCode);
//this = smartForms.Collection[0]; //PSEUDO-CODE
}
}
public class SmartForms
{
private string _loadCode;
public List<SmartForm> _collection = new List<SmartForm>();
public List<SmartForm> Collection
{
get
{
return _collection;
}
}
public SmartForms(string loadCode)
{
_loadCode = loadCode;
Load();
}
//fills internal collection from data source, based on "load code"
private void Load()
{
switch (_loadCode)
{
case "all":
SmartForm smartFormA = new SmartForm { IdCode = "customerMain", Title = "Customer Main" };
SmartForm smartFormB = new SmartForm { IdCode = "customerMain2", Title = "Customer Main2" };
SmartForm smartFormC = new SmartForm { IdCode = "customerMain3", Title = "Customer Main3" };
_collection.Add(smartFormA);
_collection.Add(smartFormB);
_collection.Add(smartFormC);
break;
case "id = 34":
SmartForm smartForm2 = new SmartForm { IdCode = "customerMain2", Title = "Customer Main2" };
_collection.Add(smartForm2);
break;
default:
break;
}
}
}
}
Точно, я ищу что-то подобное, все, что мне нужно, это простые свойства, но для любого типа объекта он должен быть динамическим, я думаю о каком-то классе «клонирование через отражение», t есть что-то подобное, например System.Reflection.Clone (SmartForms [0])? –