Приветствую коллег, рассматриваемая ситуация такова:Возможно ли CreateInstance объекта с защищенным конструктором?
public abstract class BaseClass
{
protected BaseClass()
{
// some logic here
}
protected BaseClass(Object parameter) : this()
{
// some more logic
}
}
public class Descendant : BaseClass
{
// no constructors
}
Я пытаюсь вызвать Activator.CreateInstance на потомке класса, но не конструктор найден.
Нужно ли мне определить его в классе Descentant?
привязок я использовал следующие: BindingFlags.Instance | BindingFlags.NonPublic
Примечание 1: Я звоню AppDomain.CreateInstanceAndUnwrap() на самом деле, если она должна иметь какое-то влияние.
domain.CreateInstanceAndUnwrap(path, typeName, false, BindingFlags.Instance |
BindingFlags.NonPublic, null, new[] { parameter }, null, null);
Примечание 2: Если я явно определить защищенный конструктор в потомке класса то он работает, но я хотел бы избежать этого, если это возможно.
Проблемы заключается в том Конструкторы фактически не наследуется, поэтому поиска производного типа для них (как вы обнаружили) непродуктивный. – dlev
Я знаю это, но не хочу заставлять других программистов реализовывать этот один конструктор по умолчанию снова и снова (я тоже это ненавижу). – SmartK8
Если вы знаете это, тогда вы также знаете, что вам нужен другой подход. Конструктор, которого вы хотите вызвать, не существует! – dlev