如题。在网上看了部分资料后,对回调函数。
有了自己的理解。也由于初衷的原因(好奇):什么是回调函数,为什么叫回调函数。现在唯一还不懂的是,为什么叫“回调函数”,我想了解,给这名称命名的作者、还有想法,是怎么想的。
不知道大侠们有木有这方面了解。(还是说有个什么典故之类的?)在C#中,我设计一些类的时候,因为想把某功能抽象出来。这个叫:抽象接口。
而在设计一些:提供给外部调用自定义的逻辑处理的方法时,这时,就用到了。delegate,委托。delegate可以理解成,一个方法体的封装类。
而我们所说的回调函数,无非就是:以某个特定的条件下而执行的函数。大家可以拍砖、扔鸡蛋、本人保持蛋定!如:我在游戏中,设计一个玩家类://这就声明了一个:所谓回调,函数的一种。但怎么调用,才是回调的精神
public delegate void UpdatingEventHandler(object sender, GameTime gameTime);
//这就声明了一个:所谓回调,函数的一种。但怎么调用,才是回调的精神
public delegate void DrawingEventHandler(object sender, GameTime gameTime);
//游戏中对可更新对象接口的提取
public interface IUpdateable
{
 bool EnableUpdate{get;set;}
 void Update(GameTime gameTime);
}//游戏中对可绘制对象接口的提取
public interface IDrawable
{
 bool DraweEnable{get;set;}
 void Draw(GameTime gameTime);
}//游戏基对象
public class GameObject :  IUpdateable, IDrawable
{
 //这里实现就不写了。
}public class Character : GameObject
{
 bool _isDead;
 public bool IsDead{get;}  //这里直接定义委托对象,也就是我们所说的回调数吧,但只能传一个
 //但我们的回调功能,可能在不同的外部,分别实现不同的功能,
 //那这时,我们应该用事件:事件,可以理解成:委托集合对象(这是我自己的理解、有错望大家指出,便于巩固、理解)
 //public UpdatingEventHandler UpdatingEventHandler ; //定义成事件
 public event UpdatingEventHandler UpdatingEvent;
 protected virtual void OnUpdatingEvent (object sender, GameTime gameTime)
 {
  if(UpdatingEvent!=null)
  {
   UpdatingEvent(sender, gameTime);
  }
 } public event DrawingEventHandler DrawingEvent;
 protected virtual void OnDrawingEvent (object sender, GameTime gameTime)
 {
  if(DrawingEvent!=null)
  {
   DrawingEvent(sender, gameTime);
  }
 } //也可以用系统内定义的EventHandler
 public event EventHandler HpChanged;
  protected virtual void OnHpChanged(object sender, GameTime gameTime)
 {
  if(HpChanged!=null)
  {
   HpChanged(sender, gameTime);
  }
 }
 int _hp;
 public int Hp
 {
  get{return _hp;}
  set
  {
   if(_hp!=value)
   {
    OnHpChanged(this, EventArgs.Empty;)
   }
  }
 }
}public class Person : GameObject
{
 //............
 ..........
 ...
 string _name;
 public string Name{get{return _name;}}
 public Person(string name){_name=name;}
 ...............
}static void Main(string[] args)
{
 Random random=new Random();
 Person person=new Person("Person1");
 person.HP=10000;
 person.HpChanged+=HpChangedHandlerMethod; do
 {
  Person.HP-=random.Next(1,15);
 }
 while(!person.IsDead);
 
 Console.WriteLine("Press any key to exit.");
 Console.ReadLine();
}static void HpChangedHandlerMethod(object sender, EventArgs e)
{
 Person p = sender as Person;
 if(p==null)return;
 if(p.Hp<=0)
 {
  p.IsDead=true;
 }
 Console.WriteLine("Person.Hp : "+p.Hp);
 Console.WriteLine("IsDead:"+p.IsDead);
}这样,我只要在do...while里对Person类对象的HP值改变,就可以看到回调函数,被自动调用了。以前用了这么久,没有理解回调的意思。
现在我这种理解,不知道是否正确。