2009-10-15 2 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 static. Это должно решить вашу проблему.

1

Сделать метод OnCreateOfferComplete статический.

1

Проблема в том, что ваш метод OnCreateOfferComplete() должен быть static.

1

Проблема в том, что вы вызываете CreateOffer из статического метода (OnCreateOfferComplete - это метод экземпляра).

В этом случае просто объявите свой метод OnCreateOfferComplete статическим.

1

Я думаю, что это должно быть статическим:

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

... потому что вы вызываете его от статического Main метода.

Смежные вопросы