2009-10-15 4 views
0

다음 예제가 작동하지만 익명 메소드를 실행하는 대신 내 기존 콜백 메소드 OnCreateOfferComplete()을 실행하도록 어떻게 변경할 수 있습니까?익명 메소드 대신 콜백 메소드를 실행하는 방법은 무엇입니까?

using System; 

namespace TestCallBack89393 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      OfferManager offerManager = new OfferManager(); 
      offerManager.CreateOffer("test",() => Console.WriteLine("finished.")); 

      //offerManager.CreateOffer("test", OnCreateOfferComplete); 
      //above line gives error: an object reference is required 
      //for a non-static field... 



      Console.ReadLine(); 

     } 

     private void OnCreateOfferComplete() 
     { 
      Console.WriteLine("finished"); 
     } 
    } 


    public class OfferManager 
    { 

     public void CreateOffer(string idCode, Action onComplete) 
     { 
      if (onComplete != null) 
       onComplete(); 
     } 
    } 
} 

답변

3

정적 메서드 OnCreateOfferComplete를 만듭니다. 이것은 당신의 문제를 화나게 할 것입니다.

1

만들기 OnCreateOfferComplete 메서드 정적.

1

문제는 사용자의 OnCreateOfferComplete() 메서드가 static 일 필요가 있다는 것입니다.

1

정적 메서드 (OnCreateOfferComplete는 인스턴스 메서드)에서 CreateOffer를 호출하는 것이 문제입니다.

이 경우에는 OnCreateOfferComplete 메서드를 정적으로 선언하십시오.

1

나는 그것이 정적해야한다고 생각 :

private static void OnCreateOfferComplete() 
{ 
    Console.WriteLine("finished"); 
} 

을 ... 당신이 정적 Main 방법에서 호출 때문이다.

관련 문제