如题。在网上看了部分资料后,对回调函数。
有了自己的理解。也由于初衷的原因(好奇):什么是回调函数,为什么叫回调函数。现在唯一还不懂的是,为什么叫“回调函数”,我想了解,给这名称命名的作者、还有想法,是怎么想的。
不知道大侠们有木有这方面了解。(还是说有个什么典故之类的?)在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值改变,就可以看到回调函数,被自动调用了。以前用了这么久,没有理解回调的意思。
现在我这种理解,不知道是否正确。
有了自己的理解。也由于初衷的原因(好奇):什么是回调函数,为什么叫回调函数。现在唯一还不懂的是,为什么叫“回调函数”,我想了解,给这名称命名的作者、还有想法,是怎么想的。
不知道大侠们有木有这方面了解。(还是说有个什么典故之类的?)在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值改变,就可以看到回调函数,被自动调用了。以前用了这么久,没有理解回调的意思。
现在我这种理解,不知道是否正确。
俺英文不及格。
一直都写着写着不懂就桌面词典一下。
C++,大学碰过。
没有实际用过。
大学白读了唉那vrhero,老师意思是先叫我去学英文、C++了恩看来真要去恶补一下。