抽象类 接口 委托
抽象类:
提供了部分功能的实现,但是不能被实例化的类,除了不能实例化和可能包含抽象方法两个特点,其余使用和正常类一样。
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;
委托主要解决的是回调的问题