Вопросы о намерениях в стороне, нет никакого общего способа сделать это. Информация о том, какие методы были вызваны и какие значения были предоставлены, не сохраняется автоматически. Вы, конечно, прекрасно умеете следить за этими вещами самостоятельно, но вам придется написать каждый класс, чтобы сделать это явно.
Выполнение этого в общем виде порождает проблемы. Что если я сделал это?
public class Foo
{
public string Name { get; set; }
}
public class Bar
{
public Bar(Foo foo)
{
// ...
}
}
Тогда предположим, что я назвал это так:
Foo f = new Foo();
f.Name = "Jim";
Bar b = new Bar(f);
f.Name = "Bob";
Теперь, если бы существовала такая общая система, каково было бы значение foo
для конструктора Bar
? Либо он сообщает "Bob"
(то есть значение Name
для экземпляра Foo
, который был предоставлен), либо сообщает "Jim"
, что означает, что среда выполнения или библиотека должны быть достаточно умными, чтобы сделайте глубокую копию объекта, чтобы состояние не изменилось.
Суть в следующем: если вам нужен доступ к параметрам, переданным конструктору (или любой другой функции), вам придется явно их где-то хранить.