【问题标题】:How to execute a callback method instead of an anonymous method?如何执行回调方法而不是匿名方法?
【发布时间】:2009-10-15 13:41:05
【问题描述】:

下面的例子有效,但我怎样才能改变它,而不是执行匿名方法,而是执行我现有的回调方法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();
        }
    }
}

【问题讨论】:

    标签: c# delegates lambda callback


    【解决方案1】:

    将 OnCreateOfferComplete 方法设为静态。这应该可以解决您的问题。

    【讨论】:

      【解决方案2】:

      使 OnCreateOfferComplete 方法静态

      【讨论】:

        【解决方案3】:

        问题是你的方法OnCreateOfferComplete()需要是static

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

            【解决方案5】:

            我认为应该是静态的:

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

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-05-18
              • 2010-09-08
              • 1970-01-01
              • 2019-09-05
              相关资源
              最近更新 更多