IArgumentProvider Antarmuka
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
Menyediakan antarmuka internal untuk mengakses argumen beberapa simpul pohon (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression, dan IndexExpression). API ini hanya untuk penggunaan internal.
public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
- Turunan
Keterangan
Anda tidak boleh menggunakan API ini. Ini bersifat publik hanya karena pemfaktoran ulang perakitan, dan hanya ada untuk pengoptimalan performa internal. Ini memungkinkan dua pengoptimalan yang mengurangi ukuran pohon:
Ini memungkinkan simpul untuk menahan IList<T> alih-alih ReadOnlyCollection<T>. Ini menghemat biaya alokasi koleksi baca-saja untuk setiap simpul.
Ini memungkinkan subkelas khusus dibuat yang berpegang pada sejumlah argumen tertentu (misalnya,
Block2
, ,Block2
Block4
). Oleh karena itu, simpul ini menghindari alokasi dan ReadOnlyCollection<T> array untuk menyimpan elemennya, sehingga menghemat 32 byte per simpul. Teknik ini digunakan oleh berbagai node, termasuk BlockExpression, InvocationExpression, dan MethodCallExpression.
Simpul pohon ekspresi terus mengekspos properti ReadOnlyCollection<T> LINQ asli objek. Mereka melakukan ini dengan menggunakan kembali bidang untuk menyimpan array atau elemen yang biasanya akan disimpan dalam array.
Untuk kasus array, koleksi di ketikkan ke IList<T> alih-alih ReadOnlyCollection<T>. Ketika node awalnya dibangun, itu adalah array. Pengkompilasi atau utilitas di pustaka ini mengakses elemen melalui antarmuka ini. Mengakses elemen array mempromosikan array ke ReadOnlyCollection<T>.
Untuk kasus objek, argumen pertama disimpan dalam bidang yang ditik ke Object. Ketika simpul awalnya dibangun, bidang ini menyimpan Expression argumen pertama. Ketika pengkompilasi dan utilitas dalam pustaka ini mengakses argumen, mereka kembali menggunakan antarmuka ini, dan pengaktor untuk argumen pertama menggunakan metode pembantu internal Expression.ReturnObject<T>(System.Object)
untuk mengembalikan objek yang menangani Expression atau ReadOnlyCollection<T> kasus. Ketika pengguna mengakses ReadOnlyCollection<T>, bidang objek diperbarui untuk menahan langsung ke ReadOnlyCollection<T>.
Penting bahwa Expression properti secara konsisten mengembalikan yang sama ReadOnlyCollection<T>. Jika tidak, rewriter tree walker yang digunakan oleh pengunjung ekspresi akan pecah. Ini adalah perubahan yang melanggar dari LINQ v1 untuk mengembalikan yang berbeda ReadOnlyCollection<T> dari simpul yang sama Expression . Saat ini, pengguna dapat mengandalkan identitas objek untuk mengetahui apakah simpul telah berubah. Menyimpan ReadOnlyCollection<T> di bidang yang kelebihan beban mengurangi penggunaan memori dan mempertahankan kompatibilitas untuk API publik.
Properti
ArgumentCount |
Mengembalikan jumlah argumen ke simpul pohon ekspresi. API ini hanya untuk penggunaan internal. |
Metode
GetArgument(Int32) |
Mengembalikan argumen di |