반사의 일부 사용(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) 등입니다.여기서는 상술하지 않겠습니다.

좋은 웹페이지 즐겨찾기