Saya ingin membuat contoh tipe yang saya tentukan dalam metode generik yang saya miliki. Tipe ini memiliki sejumlah konstruktor yang kelebihan beban. Saya ingin bisa memberikan argumen kepada konstruktor, tetapi
Activator.CreateInstance<T>()
tidak melihat memiliki ini sebagai opsi.
Apakah ada cara lain untuk melakukannya?
c#
generics
createinstance
DaveDev
sumber
sumber
Jawaban:
Iya.
sumber
Ada cara lain untuk meneruskan argumen ke CreateInstance melalui parameter bernama.
Berdasarkan itu, Anda dapat meneruskan array ke
CreateInstance
. Ini akan memungkinkan Anda untuk memiliki 0 atau beberapa argumen.sumber
Perlu diingat bahwa argumen yang lewat pada Activator.CreateInstance memiliki perbedaan kinerja yang signifikan versus pembuatan tanpa parameter.
Ada alternatif yang lebih baik untuk membuat objek secara dinamis menggunakan lambda yang sudah dikompilasi. Tentu saja selalu kinerja subjektif dan jelas tergantung pada setiap kasus apakah itu layak atau tidak.
Detail tentang masalah pada artikel ini.
Grafik diambil dari artikel dan mewakili waktu yang diambil dalam ms per 1000 panggilan.
sumber
Activator.CreateInstance
akan mengambil0.0035ms
(atau 3,5 mikrodetik) - tergantung pada aplikasi Anda ini bahkan mungkin tidak mendaftar dalam tes kinerja sama sekali.Sebagai alternatif untuk Activator.CreateInstance, FastObjectFactory di dalam url tertaut lebih baik daripada Activator (pada. NET 4.0 dan secara signifikan lebih baik daripada. NET 3.5. Tidak ada tes / statistik yang dilakukan dengan .NET 4.5). Lihat posting StackOverflow untuk statistik, info, dan kode:
Bagaimana cara melewati argumen ctor di Activator.CreateInstance atau menggunakan IL?
sumber
sumber