IArgumentProvider 인터페이스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
여러 트리 노드(DynamicExpression, ElementInit, MethodCallExpression, InvocationExpression, NewExpression 및 IndexExpression)의 인수에 액세스하기 위한 내부 인터페이스를 제공합니다. 이 API는 내부 전용입니다.
public interface class IArgumentProvider
public interface IArgumentProvider
type IArgumentProvider = interface
Public Interface IArgumentProvider
- 파생
설명
이 API를 사용하면 안됩니다. 어셈블리 리팩터링으로 인해 공용이며 내부 성능 최적화에만 존재합니다. 트리의 크기를 줄이는 두 가지 최적화를 사용할 수 있습니다.
노드가 대신 ReadOnlyCollection<T>를 IList<T> 유지할 수 있습니다. 이렇게 하면 각 노드에 대한 읽기 전용 컬렉션을 할당하는 비용이 절감됩니다.
특정 수의 인수(예
Block2
: , ,Block2
Block4
)를 유지하는 특수 서브클래스를 만들 수 있습니다. 따라서 이러한 노드는 요소를 저장하기 위해 와 ReadOnlyCollection<T> 배열을 모두 할당하지 않으므로 노드당 32바이트를 저장합니다. 이 기술은 , InvocationExpression및 MethodCallExpression를 비롯한 BlockExpression다양한 노드에서 사용됩니다.
식 트리 노드는 개체의 ReadOnlyCollection<T> 원래 LINQ 속성을 계속 노출합니다. 일반적으로 배열에 저장되는 배열 또는 요소를 모두 저장하기 위해 필드를 다시 사용하여 이 작업을 수행합니다.
배열 사례의 경우 컬렉션은 대신 ReadOnlyCollection<T>에 IList<T> 입력됩니다. 노드가 처음 생성되면 배열입니다. 이 라이브러리의 컴파일러 또는 유틸리티는 이 인터페이스를 통해 요소에 액세스합니다. 배열 요소에 액세스하면 배열 ReadOnlyCollection<T>이 로 승격됩니다.
개체의 경우 첫 번째 인수는 에 형식화된 필드에 저장됩니다 Object. 노드가 처음 생성되면 이 필드는 첫 번째 인수의 를 보유 Expression 합니다. 이 라이브러리의 컴파일러 및 유틸리티가 인수에 액세스하면 이 인터페이스를 다시 사용하고 첫 번째 인수의 접근자는 내부 Expression.ReturnObject<T>(System.Object)
도우미 메서드를 사용하여 또는 ReadOnlyCollection<T> 대/소문자를 처리하는 개체를 Expression 반환합니다. 사용자가 에 액세스하면 ReadOnlyCollection<T>개체 필드가 에 직접 ReadOnlyCollection<T>저장되도록 업데이트됩니다.
속성이 동일한 ReadOnlyCollection<T>를 일관되게 반환하는 Expression 것이 중요합니다. 그렇지 않으면 식 방문자가 사용하는 재작성 트리 워커가 중단됩니다. LINQ v1에서 동일한 Expression 노드와 다른 ReadOnlyCollection<T> 값을 반환하는 호환성이 손상되는 변경입니다. 현재 사용자는 개체 ID를 사용하여 노드가 변경되었는지 확인할 수 있습니다. 오버로드된 필드에 를 저장하면 ReadOnlyCollection<T> 메모리 사용량이 줄어들고 공용 API에 대한 호환성이 유지됩니다.
속성
ArgumentCount |
인수 수를 식 트리 노드에 반환합니다. 이 API는 내부 전용입니다. |
메서드
GetArgument(Int32) |
|
적용 대상
.NET