У меня есть класс X, который использует класс Y. X создает Y, но X должен создать Y с тем же методом конструктора SAME, который использовался для создания экземпляра Y, переданного X.
- Это не клон, потому что я хочу, чтобы НОВЫЙ объект-Y не равнялся значениям экземпляра-Y, переданным в X.
- Это не экземпляр, потому что я не хочу ЖЕ ЖЕ объект-Y, который помещен как экземпляр-Y в X.
Я хотел бы передать "метод и параметры конструктора" класса Y классу X и, используя эту информацию, создать новый экземпляр Y с использованием переданного метода ctor.
И я не хочу развивать всю логику конструктора класса Y, потому что в этом случае они оба будут очень сильно связаны.
Я сделал небольшой всплеск, чтобы объяснить себя немного лучше.
Спасибо.
using System;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
TheSon son1 = new TheSon();
son1.TheValue = "Another Value";
TheFather<TheSon> father1 = new TheFather<TheSon>(son1);
Console.WriteLine("Result is {0}:", "Empty constructor".Equals(father1.MySon.TheValue));
Console.WriteLine("\tbecause prop. must be: '{0}' and it is: '{1}'", "Empty constructor", father1.MySon.TheValue);
}
public class TheFather<T> where T: TheSon
{
public TheSon MySon { get; set; }
public TheFather(T mySon) {
// I would like to NOT use the same object but
// use the constructor that was used to build the passed object-instance.
//
// Or perhaps pass a concrete TheSon constructor to the 'TheFather'...
this.MySon = (TheSon)mySon;
}
}
public class TheSon
{
public string TheValue { get; set; }
public TheSon()
{
this.TheValue = "Empty constructor";
}
public TheSon(string value)
{
this.TheValue = value;
}
public TheSon(string value, int element)
{
this.TheValue = value + "-> " + Convert.ToString(element);
}
}
}
}
========= РЕШЕНИЕ :
Добавление этого конструктора в класс TheFather:
public TheFather(Func<T> sonFactory)
{
this.MySon = (T)sonFactory();
}
И с этим примером:
static void Main(string[] args)
{
// Uncomment one of this to change behaviour....
//Func<TheSon> factory = () => new TheSon();
Func<TheSon> factory = () => new TheSon("AValue");
//Func<TheSon> factory = () => new TheSon("AValue", 1);
TheFather<TheSon> father1 = new TheFather<TheSon>(factory);
Console.WriteLine("Result is {0}:", "AValue".Equals(father1.MySon.TheValue));
Console.WriteLine("\tbecause prop. must be: '{0}' and it is: '{1}'", "AValue", father1.MySon.TheValue);
}
Работает как шарм ....: -)
Спасибо ...