新手,有写概念的东西不好理解,希望高手讲解下了,谢谢。 
public interface ICallBack
{ void run();}class CallBackClass:ICallBack{public void run()
{ //输出当前时间
 System.Console.WriteLine(DateTime.Now );
}
}Controller类中有一个私有的ICallBack类型的字段,用于存放回调对象的引用,此对象引用在构造函数中传入。class Controller{    public ICallBack CallBackObject = null;// 引用回调对象      这句是什么意思呢? 语法可能我不太懂?    public Controller(ICallBack obj)       {        this.CallBackObject = obj;          这个构造函数是不是 给 上面定义的  接口 CallBackObject变量 赋值呢         }    public void Begin()    {        Console.WriteLine("敲任意键显示当前时间,ESC键退出....");        while (Console.ReadKey(true).Key != ConsoleKey.Escape)        {            CallBackObject.run();   这句是什么意思呢?  CallBackObject这个借口定义的把,那怎么执行CallBackClass类RUN方法了? 能告诉吗?        }    }}Controller类的Begin()方法启动整个处理过程。调用代码如下:class Program{    static void Main(string[] args)    {        //创建控制器对象,将提供给它的回调对象传入        Controller obj = new Controller(new CallBackClass()); // 这个构造函数传递的是CallBackClass类,怎么和接口联系呢? 能告诉我语法吗?  public Controller(ICallBack obj)  这里是接口的哦。         //启动控制器对象运行        obj.Begin();    }}

解决方案 »

  1.   

    //接口:服务的承诺
    public interface ICallBack  
    {
        void run();  //定义ICallBack必须有功能run
    }class CallBackClass : ICallBack  //CallBackClass承诺具有ICallBack所定义的功能
    {
        public void run()
        { 
            System.Console.WriteLine(DateTime.Now);
        }
    }class Controller
    {
        public ICallBack CallBackObject = null;    public Controller(ICallBack obj)  //构造函数需要一个具有ICallBack所定义的功能obj,obj的具体类型是不关心的,保存到CallBackObject
        {
            this.CallBackObject = obj;   
        }    public void Begin()
        {
            Console.WriteLine("敲任意键显示当前时间,ESC键退出....");
            while (Console.ReadKey(true).Key != ConsoleKey.Escape)
            {
                CallBackObject.run(); //CallBackObject必定具有run的功能,调用run
            }
        }
    }
      

  2.   

    interface ICallBack   这是你的接口
    void run();           这是你的接口的方法
    class CallBackClass : ICallBack 
    {
      public void run()
      { 
      System.Console.WriteLine(DateTime.Now);
      }
    }
    CallBackClass :继承了你接口里的功能,public void run()是实现你接口中的方法了。
      

  3.   

    class CallBackClass : ICallBack //CallBackClass承诺具有ICallBack所定义的功能
    {
      public void run()
      {  
      System.Console.WriteLine(DateTime.Now);
      }
    }
    一个实例化为CallBackClass类实例的对象,它同时也就是一个ICallBack类的实例对象,这是面向对象的继承概念。CallBackClass 类中实现run方法,根据c#的语法,编译器就可以知道这是实现ICallBack的run。(这是因为它是interface,而如果ICallBack如果是class,则需要在CallBackClass 中写 override 关键字来标记 run 方法)。传递符合ICallBack类型的对象实例,但是由于它是interface,而c#编译器只允许class才能创建实例化对象,所以实际上这个对象的真实类型只会是ICallBack的扩展类型。这种用后继类型对象来替代对象参数的做法,叫做多态。
      

  4.   

    在java和.net中的interface,它不像class那样具有传递性,也不实现任何代码,但是你在应用时不要因为它太简单而反而迷惑了。声明public ICallBack CallBackObject = null;
    不意味着CallBackObject 变量的真实类型,而只是意味着这个变量指向的对象兼容于 ICallBack 而已。
      

  5.   

    理解这个东西就千万别陷在语法里,语法只是表述而已要理解他们你得形而上的去看他们,理解一下下面这个例子class 李宇春:女,I纯爷们
    {
    }class 刘著:男,I伪娘
    {
    }如果说我们现在 要举行一个比赛,姑且就叫 “纯爷们专场PK赛” 或 “伪娘专场PK赛”public 伪娘专场PK赛(I伪娘 参赛选手)那么我们这么调用  伪娘专场PK赛(new 刘著())  这样有何不可??
      

  6.   

    谢谢那么多人解析了 ,我慢满立即
    谢谢 sp1234讲的语法我理解一点了 在看wanghui0380 解析也看看。
      

  7.   

    顶十楼的,接口关心的是动作,如同去kalaOK去唱歌,拿麦克唱歌,管你是男是女。