Activator.CreateInstance имеет много перегрузок. Вы должны использовать перегрузку, которая требует типа и массив объектов ADITION для атрибутов
Вы можете создать экземпляр этого класса
public class MyClass
{
public MyClass(int _int, string _string, bool _bool)
{
}
}
с
Activator.CreateInstance(typeof(MyClass), new object[] { 1, "string", true });
Как die maus
сказал Activator. CreateInstance может быть медленным по сравнению с другими решениями. Но это полностью зависит от того, что вы хотите сделать. Если вы хотите построить платформу для внедрения зависимостей, я бы предложил использовать альтернативный подход. Если вы хотите создать тип во время выполнения, и не имеет значения, требуется ли 3 или 15 миллисекунд, вы должны быть в порядке.
Я написал быстрый тест:
var sw = new System.Diagnostics.Stopwatch();
sw.Start();
for (int i = 0; i < 100000; i++)
{
var file = new System.IO.FileInfo(@"c:\temp\file");
}
var t1 = sw.ElapsedMilliseconds;
var args = new object [] { @"c:\temp\file" };
sw.Restart();
for (int i = 0; i < 100000; i++)
{
var file = Activator.CreateInstance(typeof(System.IO.FileInfo), args);
}
var t2 = sw.ElapsedMilliseconds;
Console.WriteLine("t1: {0}", t1);
Console.WriteLine("t2: {0}", t2);
Выход:
t1: 466
t2: 1246
Я бы не рассматривать этот huge
в большинстве сценариев ...
@Veverke, я не понимаю, что вы имеете в виду. – BendEg
Существует только один параметр-Меньший конструктор, вот почему я так запутался. – BendEg