CustomReflectionContext 클래스
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
사용자 지정 가능한 리플렉션 컨텍스트를 나타냅니다.
public ref class CustomReflectionContext abstract : System::Reflection::ReflectionContext
public abstract class CustomReflectionContext : System.Reflection.ReflectionContext
type CustomReflectionContext = class
inherit ReflectionContext
Public MustInherit Class CustomReflectionContext
Inherits ReflectionContext
- 상속
- 파생
예제
다음 예제에서는 서브클래스 CustomReflectionContext 하여 이름이 "To"로 시작하는 지정된 형식의 모든 멤버에 사용자 지정 특성을 추가하는 방법을 보여 줍니다. 이 코드를 실행 하려면는 비어 있는 콘솔 프로젝트에 붙여넣고 System.Reflection.Context.dll에 대 한 참조를 포함 해야 합니다.
//A blank example attribute.
class myAttribute : Attribute
{
}
//Reflection context with custom rules.
class myCRC : CustomReflectionContext
{
//Called whenever the reflection context checks for custom attributes.
protected override IEnumerable<object> GetCustomAttributes(MemberInfo member, IEnumerable<object> declaredAttributes)
{
//Add example attribute to "To*" members.
if (member.Name.StartsWith("To")) {
yield return new myAttribute();
}
//Keep existing attributes as well.
foreach (var attr in declaredAttributes) yield return attr;
}
}
class Program
{
static void Main(string[] args)
{
myCRC mc = new myCRC();
Type t = typeof(String);
//A representation of the type in the default reflection context.
TypeInfo ti = t.GetTypeInfo();
//A representation of the type in the customized reflection context.
TypeInfo myTI = mc.MapType(ti);
//Display all the members of the type and their attributes.
foreach (MemberInfo m in myTI.DeclaredMembers)
{
Console.WriteLine(m.Name + ":");
foreach (Attribute cd in m.GetCustomAttributes())
{
Console.WriteLine(cd.GetType());
}
}
Console.WriteLine();
//The "ToString" member as represented in the default reflection context.
MemberInfo mi1 = ti.GetDeclaredMethods("ToString").FirstOrDefault();
//All the attributes of "ToString" in the default reflection context.
Console.WriteLine("'ToString' Attributes in Default Reflection Context:");
foreach (Attribute cd in mi1.GetCustomAttributes())
{
Console.WriteLine(cd.GetType());
}
Console.WriteLine();
//The same member in the custom reflection context.
mi1 = myTI.GetDeclaredMethods("ToString").FirstOrDefault();
//All its attributes, for comparison. myAttribute is now included.
Console.WriteLine("'ToString' Attributes in Custom Reflection Context:");
foreach (Attribute cd in mi1.GetCustomAttributes())
{
Console.WriteLine(cd.GetType());
}
Console.ReadLine();
}
}
설명
CustomReflectionContext 추가 리플렉션 개체에서 사용자 지정 특성을 제거 또는 다시 전체 리플렉션 모델을 구현 하지 않고 해당 개체에 더미 속성을 추가 하는 방법을 제공 합니다. 기본 CustomReflectionContext 하위 클래스 지정 하 고 관련 메서드를 재정의 하 여 있습니다 수 추가, 제거 또는 반영된 매개 변수 또는 멤버에 적용 되는 특성을 변경 또는 새 속성을 추가 하지만 변경 하지 않고 단순히 래핑하고 리플렉션 개체를 리플 렉 트 된 형식입니다.
예를 들어, 코드 팩터리 메서드를 특정 특성을 적용 하는 규칙을 따르는지 하지만 특성이 없는 제 3 자 코드를 작성 하려면 이제 해야 합니다. 사용할 수 있습니다 CustomReflectionContext 특성이 있어야 하는 개체를 식별 하는 것에 대 한 규칙을 지정 하 고 코드에서 볼 때 이러한 특성이 포함 된 개체를 제공 합니다.
사용할 CustomReflectionContext 리플 렉 트 된 개체를 사용 하는 코드 개체는 연결 된 런타임 리플렉션 컨텍스트를 사용 하 여 반영 하는 모든 것으로 가정 하는 대신 리플렉션 컨텍스트를 지정 하는 개념을 지원 해야 합니다는 효과적으로 합니다. .NET Framework의 많은 리플렉션 메서드는 제공 된 ReflectionContext 이 목적을 위해 매개 변수입니다.
리플 렉 트 된 매개 변수 또는 멤버에 적용 되는 특성을 수정 하려면 합니다 GetCustomAttributes(ParameterInfo, IEnumerable<Object>) 또는 GetCustomAttributes(MemberInfo, IEnumerable<Object>) 메서드. 이러한 메서드는 반영된 개체 및 해당 현재 리플렉션 컨텍스트에서 특성의 목록 및 사용자 지정 리플렉션 컨텍스트의 있어야 하는 특성의 목록을 반환 합니다.
경고
CustomReflectionContext 메서드를 호출 하 여 직접 반영된 개체 또는 메서드 특성 목록에 액세스 하지 않아야 합니다 GetCustomAttributes 메서드를 제공 된 MemberInfo 또는 ParameterInfo 인스턴스를 대신 사용 해야 하지만 declaredAttributes
매개 변수로 전달 되는 목록 에 GetCustomAttributes 메서드 오버 로드 합니다.
리플 렉 트 된 형식으로 속성을 추가 하려면 재정의 AddProperties 메서드. 메서드는 반영된 유형을 지정 하 고 추가 속성의 목록을 반환 하는 매개 변수를 허용 합니다. 사용 해야는 CreateProperty 메서드를 반환 하는 속성 개체를 만듭니다. 속성 접근자를 될 하는 속성을 만들기 및 읽기 전용 또는 쓰기 전용 속성 접근자 중 하나를 생략할 수 있습니다 하는 경우 대리자를 지정할 수 있습니다. 이러한 더미 속성 메타 데이터 또는 중간 언어 (CIL (공용) 백업 없습니다 있는 note 합니다.
경고
때문일 반영된 개체 간의 같음에 대 한 주의 리플렉션 컨텍스트를 사용 하 여 작업할 때 개체가 여러 컨텍스트에서 동일한 리플 렉 트 된 개체를 나타낼 수 있습니다. 사용할 수는 MapType 메서드 리플 렉 트 된 개체의 특정 리플렉션 컨텍스트의 버전을 가져옵니다.
경고
A CustomReflectionContext 개체에서 가져온 것과 같은 특정 리플렉션 개체를 반환 하는 특성을 변경 합니다 GetCustomAttributes 메서드. 반환 되는 사용자 지정 특성 데이터를 변경 하지 않습니다는 GetCustomAttributesData 메서드 및이 두 목록 사용자 지정 리플렉션 컨텍스트를 사용 하는 경우 일치 하지 않게 됩니다.
생성자
CustomReflectionContext() |
CustomReflectionContext 클래스의 새 인스턴스를 초기화합니다. |
CustomReflectionContext(ReflectionContext) |
지정된 리플렉션 컨텍스트를 기반으로 사용하여 CustomReflectionContext 클래스의 새 인스턴스를 초기화합니다. |
메서드
AddProperties(Type) |
파생된 클래스에서 재정의된 경우 이 리플렉션 컨텍스트에 제공된 바와 같이 지정된 형식에 대한 추가 속성 컬렉션을 제공합니다. |
CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>) |
AddProperties(Type) 메서드와 함께 사용할 형식에 추가될 속성을 나타내는 개체를 만듭니다. |
CreateProperty(Type, String, Func<Object,Object>, Action<Object,Object>, IEnumerable<Attribute>, IEnumerable<Attribute>, IEnumerable<Attribute>) |
지정된 사용자 지정 특성을 사용하여 AddProperties(Type) 메서드와 함께 사용할 형식에 추가될 속성을 나타내는 개체를 만듭니다. |
Equals(Object) |
지정된 개체가 현재 개체와 같은지 확인합니다. (다음에서 상속됨 Object) |
GetCustomAttributes(MemberInfo, IEnumerable<Object>) |
파생된 클래스에서 재정의된 경우 이 리플렉션 컨텍스트에 제공된 바와 같이 지정된 멤버에 대한 사용자 지정 특성 목록을 제공합니다. |
GetCustomAttributes(ParameterInfo, IEnumerable<Object>) |
파생된 클래스에서 재정의된 경우 이 리플렉션 컨텍스트에 제공된 바와 같이 지정된 매개 변수에 대한 사용자 지정 특성 목록을 제공합니다. |
GetHashCode() |
기본 해시 함수로 작동합니다. (다음에서 상속됨 Object) |
GetType() |
현재 인스턴스의 Type을 가져옵니다. (다음에서 상속됨 Object) |
GetTypeForObject(Object) |
이 리플렉션 컨텍스트에 있는 지정된 개체의 형식의 표현을 가져옵니다. (다음에서 상속됨 ReflectionContext) |
MapAssembly(Assembly) |
다른 리플렉션 컨텍스트에서 개체가 나타내는 어셈블리의 표현을 이 리플렉션 컨텍스트에 가져옵니다. |
MapType(TypeInfo) |
다른 리플렉션 컨텍스트에서 개체가 나타내는 형식의 표현을 이 리플렉션 컨텍스트에 가져옵니다. |
MemberwiseClone() |
현재 Object의 단순 복사본을 만듭니다. (다음에서 상속됨 Object) |
ToString() |
현재 개체를 나타내는 문자열을 반환합니다. (다음에서 상속됨 Object) |
적용 대상
.NET