如何执行回调方法而不是匿名方法?

时间:2009-10-15 13:41:05

标签: c# delegates lambda callback

以下示例有效,但是如何更改它以便执行现有的回调方法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();
        }
    }
}

5 个答案:

答案 0 :(得分:3)

使方法OnCreateOfferComplete为static。这应该可以解决你的问题。

答案 1 :(得分:1)

制作OnCreateOfferComplete方法静态

答案 2 :(得分:1)

问题是您的方法OnCreateOfferComplete()必须是static

答案 3 :(得分:1)

问题是您是从静态方法调用CreateOffer(OnCreateOfferComplete是一个实例方法)。

在这种情况下,只需将OnCreateOfferComplete方法声明为静态。

答案 4 :(得分:1)

我认为它应该是静态的:

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

...因为您是从静态Main方法调用它。