Компилятор C # не удаляет любые конструкторы для вас. Откройте сборку в Reflector, и я уверен, что вы увидите созданные вами конструкторы.
Я думаю, что более вероятно, что код отражения, который вы используете, чтобы найти конструктор, не включает BindingFlags.NonPublic
. Пример кода, чтобы показать, как может работать:
using System;
using System.Reflection;
class Foo
{
internal Foo()
{
Console.WriteLine("Foo constructor");
}
}
class Program
{
static void Main(string[] args)
{
var ctor = typeof(Foo).GetConstructor
(BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Instance,
binder: null,
types: new Type[0],
modifiers: null);
ctor.Invoke(null);
}
}
EDIT: чтобы передать флаги привязки в Activator.CreateInstance
, вам нужно использовать другую перегрузку, например:
Activator.CreateInstance(typeof(Foo),
BindingFlags.NonPublic |
BindingFlags.Public |
BindingFlags.Instance,
binder: null,
args: null,
culture: null);
(Или вы можете использовать CreateInstance(type, true)
, как указано в комментариях.)