반사의 일부 사용(WP8.1 하)
5454 단어 리플렉스
반사란 동적 호출 (dll) 클래스라는 초보적인 이해입니다.
예를 들어 어떤 dll에는 하나의 종류가 있는데 반사를 통해 그 안의 속성, 방법을 알 수 있고 호출을 실현할 수 있다.
확실히 dll은 직접 인용할 수 있지만, 만약 이런 상황이 발생한다면:
추가, 삭제 기능은 같은 Dll에 속하며, 원본 프로그램 코드가 변하지 않는 상황에서 새로운 기능을 추가하려면 프로그램 집합을 동적으로 불러와야 한다.
1. 반사 획득 유형
a. 일반 클래스의 경우:
Type t = Type.GetType("TestReflect.Class1"); //typeName = +
// : Class1 obj = new Class1(); Type t = typeof(Class1);
b.Dll 등 어셈블리:
Assembly assembly = Assembly.Load(new AssemblyName() { Name = "PhoneClassLibrary1" });
// Name Dll ( )
//Load() ; LoadFrom()
Type t = assembly.GetType("PhoneClassLibrary1.TestClass"); // +
2. 인스턴스 생성
object[] args = new object[] {"arg1", "arg2"}; // ( ) ; new object[] {}
Class1 obj = (Class1)Activator.CreateInstance(t,args);
3. 획득 방법
a. 단일 방법 가져오기(참고: Public 유형에만 액세스할 수 있음)
MethodInfo method = t.GetRuntimeMethod("MethodName", new Type[] { typeof(string) }); //MethodName:
//MethodInfo method = t.GetRuntimeMethod("MethodName",new Type[]{}); //
if (method != null)
method.Invoke(obj, new object[] { "hello" });
//method.Invoke(obj, null); //
b. 액세스 수정자를 private로 가져오는 방법
//Private에 액세스하려면 메소드 컬렉션을 가져와야 합니다.
var list = t.GetRuntimeMethods();
foreach (var item in list)
{
if (item.IsPrivate) // Private
{
item.Invoke(obj, new object[] { }); // item.Invoke(obj, null);
// ,obj null
}
else if (item.Name.Equals("OtherMethod"))
{
var back = item.Invoke(obj, new object[] { " " });
}
}
4. 물론 얻는 방법 외에 필드도 얻을 수 있다(GetRuntimeField)
속성(GetRuntimeProperty), 이벤트(GetRuntimeEvent) 등입니다.여기서는 상술하지 않겠습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
반사를 이용한 범용 DAL텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.