2017-02-26 3 views
1

나는 리플렉션을 통해서만 다른 클래스와 상호 작용하는 클래스가 있습니다. 이 클래스에는 일부 대리인이 있으며 이들을 설정하려고합니다. Heres는 그들이 어떻게 생겼는지 : 여기클래스 멤버를 함수로 설정

public class ClassThatIAmReflecting { 
    public delegate void OnSuccessDelegate(bool value); 

    public static OnSuccessDelegate OnSuccess; 

    public void OnClassThatIAmReflectingSuccess(bool arg) { 
     if(OnSuccess != null) 
      OnSuccess(arg); 
    } 
} 

그리고 내가 노력하고 무엇 :

public class MyClass { 

    void Init() { 
     Type type = Type.GetType("ClassThatIAmReflecting"); 

     FieldInfo fieldInfo = type.GetField("OnSuccess", BindingFlags.Public | BindingFlags.Static); 
     fieldInfo.SetValue(null, HandleOnSuccess); 
    } 

    void HandleOnSuccess(bool value) { 
     // do stuff ... 
    } 
} 

내가 점점 오전 오류가이 개체에 작업을 변환 할 수 있다는 것입니다. 내가 어떻게이 일을 할 수 있는지에 대한 도움이 필요 하신가요?

+0

입니까? 다른 클래스의 코드를 보여주십시오. –

+0

OnSuccess가 C++ DLL에서 호출되는 함수를 통해 호출되고 있습니다. ClassThatIAmReflecting 클래스는 C# 클래스와 C++ dll 사이에있는 브리지입니다. – Steph

답변

2

클래스는 다음과 같아야합니다 onsuccess는 무엇

public class MyClass 
{ 

    public void Init() 
    { 
     Type type = typeof(ClassThatIAmReflecting); 
     FieldInfo fieldInfo = type.GetField("OnSuccess", BindingFlags.Public | BindingFlags.Static); 
     var fieldType = fieldInfo.FieldType; 

     var methodInfo = this.GetType().GetMethod("HandleOnSuccess", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance); 
     var del = Delegate.CreateDelegate(fieldType, this, methodInfo); 

     fieldInfo.SetValue(null, del); 

     //test 
     ClassThatIAmReflecting.OnSuccess(true); 
    } 

    private void HandleOnSuccess(bool value) 
    { 
     Console.WriteLine("Called"); 
    } 
} 
+0

안녕하세요, 로마, 도와 줘서 고마워! 이 didnt는 작동하는 것처럼 보인다. 그러나 나는 달리게 할 수 있었다. CreateDelegate에 문제가있어서 그것을 고치기 위해'null' 대신에'this'를 전달합니다. 도와 줘서 고마워. – Steph

+0

@Steph, 괜찮습니다.하지만 'null'을 통과하면 나에게 도움이됩니다. 또한'this'를 전달할 때 작동합니다. –

관련 문제