Aracılığıyla paylaş


IArgumentProvider Arabirim

Tanım

Birden çok ağaç düğümünün bağımsız değişkenlerine erişmek için bir iç arabirim sağlar (DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression ve IndexExpression). Bu API yalnızca iç kullanıma yöneliktir.

public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
Türetilmiş

Açıklamalar

Bu API'i kullanmamalısınız. Yalnızca derleme yeniden düzenlemesi nedeniyle geneldir ve yalnızca iç performans iyileştirmeleri için mevcuttur. Ağaçların boyutunu azaltan iki iyileştirme sağlar:

  1. Düğümlerin yerine bir IList<T>ReadOnlyCollection<T>üzerinde tutmasını sağlar. Bu, her düğüm için salt okunur koleksiyonu ayırma maliyetinden tasarruf sağlar.

  2. Belirli sayıda bağımsız değişkeni (örneğin, Block2, , Block2Block4) tutan özel alt sınıfların oluşturulmasını sağlar. Bu nedenle, bu düğümler öğelerini depolamak için hem a ReadOnlyCollection<T> hem de dizi ayırmaktan kaçınarak düğüm başına 32 bayt tasarruf sağlar. Bu teknik, , InvocationExpressionve MethodCallExpressiongibi BlockExpressionçeşitli düğümler tarafından kullanılır.

İfade ağacı düğümleri, nesnelerin özgün LINQ özelliklerini ReadOnlyCollection<T> kullanıma açmaya devam eder. Bunu, hem diziyi hem de normalde dizide depolanacak bir öğeyi depolamak için bir alanı yeniden kullanarak yapar.

Dizi durumu için koleksiyon yerine ReadOnlyCollection<T>olarak IList<T> yazılır. Düğüm ilk kez oluşturulduğunda bir dizidir. Bu kitaplıktaki derleyici veya yardımcı programlar bu arabirim aracılığıyla öğelere erişir. Dizi öğelerine erişmek, diziyi olarak ReadOnlyCollection<T>yükseltir.

Nesne durumu için, ilk bağımsız değişken olarak Objectyazılan bir alanda depolanır. Düğüm ilk oluşturulduğunda, bu alan ilk bağımsız değişkenin değerini tutar Expression . Bu kitaplıktaki derleyici ve yardımcı programlar bağımsız değişkenlere eriştiğinde, yine bu arabirimi kullanır ve ilk bağımsız değişkenin erişimcisi, veya ReadOnlyCollection<T> büyük/küçük harflerini işleyen Expression nesneyi döndürmek için iç Expression.ReturnObject<T>(System.Object) yardımcı yöntemini kullanır. Kullanıcı öğesine eriştiğinde ReadOnlyCollection<T>nesne alanı doğrudan üzerinde ReadOnlyCollection<T>tutulacak şekilde güncelleştirilir.

Özelliklerin Expression tutarlı olarak aynı ReadOnlyCollection<T>değerini döndürmesi önemlidir. Aksi takdirde, ifade ziyaretçileri tarafından kullanılan yeniden yazan ağaç yürüteci kırılır. LinQ v1'den aynı Expression düğümden farklı ReadOnlyCollection<T> döndürmek hataya neden olan bir değişikliktir. Şu anda kullanıcılar düğümün değişip değişmediğini söylemek için nesne kimliğine güvenebilir. öğesini aşırı yüklenmiş bir alanda depolamak ReadOnlyCollection<T> hem bellek kullanımını azaltır hem de genel API için uyumluluğu korur.

Özellikler

ArgumentCount

İfade ağacı düğümüne yönelik bağımsız değişkenlerin sayısını döndürür. Bu API yalnızca iç kullanıma yöneliktir.

Yöntemler

GetArgument(Int32)

sınırların dışındaysa index atarak konumundaki bağımsız değişkenini indexdöndürür. Bu API yalnızca iç kullanıma yöneliktir.

Şunlara uygulanır