Quero criar uma instância de um tipo que especifique em um método genérico que possuo. Esse tipo possui vários construtores sobrecarregados. Eu gostaria de poder passar argumentos para os construtores, mas
Activator.CreateInstance<T>()
não vê isso como uma opção.
tem outro jeito de fazer isto?
c#
generics
createinstance
DaveDev
fonte
fonte
Respostas:
Sim.
fonte
Há outra maneira de passar argumentos para CreateInstance através de parâmetros nomeados.
Com base nisso, você pode passar uma matriz para
CreateInstance
. Isso permitirá que você tenha 0 ou vários argumentos.fonte
Lembre-se de que a transmissão de argumentos no Activator.CreateInstance tem uma diferença significativa de desempenho em relação à criação sem parâmetros.
Existem alternativas melhores para criar objetos dinamicamente usando lambda pré-compilado. É claro que sempre o desempenho é subjetivo e depende claramente de cada caso, se vale a pena ou não.
Detalhes sobre o problema neste artigo.
O gráfico é retirado do artigo e representa o tempo gasto em ms por 1000 chamadas.
fonte
Activator.CreateInstance
levará0.0035ms
(ou 3,5 microssegundos) - dependendo do seu aplicativo, isso pode até não ser registrado em testes de desempenho.Como alternativa ao Activator.CreateInstance, FastObjectFactory no URL vinculado é melhor que o Activator (a partir do .NET 4.0 e significativamente melhor que o .NET 3.5. Não foram realizados testes / estatísticas com o .NET 4.5). Veja a publicação StackOverflow para estatísticas, informações e código:
Como passar ctor args no Activator.CreateInstance ou usar IL?
fonte
fonte