Melihat melalui System.Linq.Enumerable
DotPeek saya perhatikan bahwa beberapa metode dibumbui dengan [__DynamicallyInvokable]
atribut.
Apa peran yang dimainkan atribut ini? Apakah ini sesuatu yang ditambahkan oleh DotPeek atau apakah ia memainkan peran lain, mungkin memberi tahu kompilator tentang cara terbaik untuk mengoptimalkan metode?
c#
dynamic-invoke
Jamie Dixon
sumber
sumber
IReadOnlyCollection<T>
.System.ServiceModel v3
'sBasicHttpBinding.TextEncoding
(yang pada V4 telah pindah ke kelas dasar baru dan menjadiHttpBindingBase.TextEncoding
)Jawaban:
Itu tidak berdokumen, tetapi sepertinya salah satu optimasi di .NET 4.5. Tampaknya digunakan untuk mengunggah cache info tipe refleksi, membuat kode refleksi berikutnya pada tipe framework umum berjalan lebih cepat. Ada komentar tentang hal itu di Sumber Referensi untuk System.Reflection.Assembly.cs, properti RuntimeAssembly.Flags:
Tanpa petunjuk lebih lanjut apa arti "API yang diberkati". Meskipun jelas dari konteksnya bahwa ini hanya akan bekerja pada tipe dalam kerangka itu sendiri. Seharusnya ada kode tambahan di suatu tempat yang memeriksa atribut yang diterapkan pada jenis dan metode. Tidak tahu di mana itu berada, tetapi mengingat bahwa itu harus perlu memiliki pandangan dari semua jenis .NET untuk mencoba caching, saya hanya bisa memikirkan Ngen.exe.
sumber
System.ServiceModel 3.0
). Saya berasumsi bahwa unifikasi a lamscorlib
referensi sedang dimainkan tetapi ada banyak yang berputar-putar tentang masalah spesifik saya untuk dilakukan - akan melaporkan kembali dan / atau menghapus nada menyesatkan ke komentar saya pada waktunya ...System.ServiceModel v3
, memuatnya di bawah pemutakhiran otomatis CLR4 keSystem.ServiceModel v4
. Bit yang menyenangkan adalah bahwa .NET 4.5 melakukan pembaruan di tempat untuk bitSystem.ServiceModel
menjatuhkan kelas dasar baru di bawahnya dan memindahkan properti ke tingkat bawah .Saya menemukan bahwa itu digunakan dalam
Runtime*Info.IsNonW8PFrameworkAPI()
rangkaian metode internal. Memiliki atribut ini ditempatkan pada anggota membuat IsNonW8PFrameworkAPI () kembalifalse
untuk itu dan dengan demikian membuat anggota tersedia di aplikasi WinRT dan menutupThe API '...' cannot be used on the current platform.
pengecualian.Penulis profiler harus menempatkan atribut ini pada anggota yang dipancarkan oleh profiler mereka ke dalam kerangka kerja majelis, jika mereka ingin mengaksesnya di bawah WinRT.
sumber
RuntimeAssembly.InvocableAttributeCtorToken
, yang dipanggil denganIsNonW8PFrameworkAPI()
metode yang Anda sebutkan.