Unity游戏开发学习之抽象类,接口,委托

本文介绍了Unity游戏开发中的抽象类、接口和委托的概念与应用。抽象类提供部分功能实现,不能实例化,常用于定义基类。接口定义方法签名,不包含实现,用于多继承。委托则类似于函数指针,可存储和调用方法,常用于事件处理和回调机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类    接口    委托

抽象类:

提供了部分功能的实现,但是不能被实例化的类,除了不能实例化和可能包含抽象方法两个特点,其余使用和正常类一样。

public abstract class NPC   //不能被实例化

{

  //可以包含抽象方法:子类必须实现的方法

  public abstract void Say();

}

 

public class XiaoBai:NPC

{

  public override void Say()

  {

  }

}

 

NPC npc = new NPC(); //错误

NPC npc = new XiaoBai(); //正确

 

 

 

接口:

同样不能被实例化,接口里面包含的方法必须在继承接口的类上实现。(和抽象方法相似),一个类可以继承多个接口,C#就是通过接口来解决了多继承的问题。

 

public interface Enemy

{

  //接口中只能有方法声明,谁继承谁实现,不能在接口中实现

  public //错误,接口中所有的方法都是public,不需要写

  void GetHit();

}

 

//接口是可以继承的

public interface Boss:Enemy

{

  void Skill();

}

 

public abstract class NPC  

{

  

  public abstract void Say();

}

 

public class XiaoBai:NPC,Enemy,……

{

  public override void Say()

  {

  }

  

  

  public void GetHit()

  {

  {

}

 

 

接口也可以实现多态性

 

public interface Enemy

{

  //接口中只能有方法声明,谁继承谁实现,不能在接口中实现

  public //错误,接口中所有的方法都是public,不需要写

  void GetHit();

}

 

public interface Boss:Enemy

{

  void Skill();

}

 

public abstract class NPC  

{

  

  public abstract void Say();

}

 

public class XiaoBai:NPC,Enemy,Boss

{

  public override void Say()

  {

  }

  

  public void GetHit()

  {

  {

 

  public void Skill()

  {

  }

}

 

XiaoBai xb =new XiaoBai();

NPC npc =xb;

Boss boss =xb;

boss.Skill();//可以继承Skill和GetHit但不能继承Say

 

 

 

 

委托:

int是保存整数的变量类型

float是保存浮点数的一个变量类型。

委托是保存方法的特殊变量类型。

 

 

public class Person

{

  //创建一个委托类型 要求:存放一个返回值为void,有一个参数为int类型为int类型的方法,类型为Func

  public delegate void Func(int a);

  //通过刚才创建的委托类型,声明一个委托

  public Func func;

  

  public Person()

  {

//让func保存Say方法

func =new Func(Say);

func(2);

  }

  

  public void Say(int a)

  {

    Console.WriteLine(“13456”);

  }

}

 

Person person =new Person();

这是第一种委托的创建方法

 

 

public class Person

{

  //创建一个委托类型 要求:存放一个返回值为void,有一个参数为int类型为int类型的方法,类型为Func

  public delegate void Func(int a);

  //通过刚才创建的委托类型,声明一个委托

  public Func func;

  

  public Person()

  {

func+=Say;

func(2);

  }

  

  public void Say(int a)

  {

    Console.WriteLine(“13456”);

  }

}

这是委托的第二种创建方式

 

 

 

public class Person

{

  //创建一个委托类型 要求:存放一个返回值为void,有一个参数为int类型为int类型的方法,类型为Func

  public delegate void Func(int a);

  //通过刚才创建的委托类型,声明一个委托

  public Func func;

  

  public Person()

  {

func+=Say;

func+=Eat;

func(2);

  }

  

  public void Say(int a)

  {

    Console.WriteLine(“13456”);

  }

 

  public void Eat(int b)

  {

    Console.WriteLine(“123456”);

  }

}

一个委托可以保存多个方法,如果保存了多个方法,在我们使用委托时他会依次调用。既然有加也有减,如果不想用哪个方法了,func-=Eat;

 

 

委托主要解决的是回调的问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值