Unity3D学习
接口定义:
接口描述的是可属于任何类或结构的一组相关功能,所以实现接口的类或结构必须实现接口定义中指定的接口成员。
接口使用interface关键字进行定义,可由方法、属性、事件、索引器或这四种成员类型的任意组合构成。
接口的特性:
1、接口类似于抽象基类,不能直接实例化接口;接口中的方法都是抽象方法,实现
接口的任何非抽象类型都必须实现接口的所有成员。
2、接口不能包含常量、字段、运算符、实例构造函数、析构函数或
类型、不能包含静态成员。
3、接口成员是自动公开的,且不能包含任何访问修饰符。
4、接口自身可从多个接口继承,类和结构可继承多个接口,但接口不能继承类。
interfaceIProgram
{
void Fun();
}
class Program:IProgram
{
//显式实现接口成员
void IProgram.Fun()
{
Console.WriteLine("I amFun.");
}
staticvoid Main(string[] args)
{
IProgram p =new Program(); //声明一个接口实例,但不是对接口进行实例化
p.Fun();
Console.Read();
}
}
实现接口可以显式实现和隐式实现,那么这两种实现到底有什么优缺点呢?
一般情况,当类或者结构要实现的是单个接口,可以使用隐式实现。
如果类或者结构继承了多个接口且接口中具有相同名称成员时,就要用到显式实现,当显式实现方式存在时,隐式实现方式就失效了。
示例:
interfaceIProgram
{
void Fun();
}
interface IAProgram
{
void Fun();
}
class Program :IProgram, IAProgram
{
void IProgram.Fun() //显式实现接口IProgram
{
Console.WriteLine("I amIProgram Fun.");
}
void IAProgram.Fun() //显式实现接口IAProgram
{
Console.WriteLine("I amIAProgram Fun.");
}
//public void Fun() //隐式实现接口
//{
// Console.WriteLine("I am Program Fun.");
//}
staticvoid Main(string[] args)
{
//IProgram p = new Program();
//p.Fun();
//IAProgram ap = new Program();
//ap.Fun();
Program pro =new Program();
((IProgram)pro).Fun();
((IAProgram)pro).Fun();
Console.Read();
}
}
接口的继承:
1. 接口继承和类继承不同:首先,类继承不仅是说明继承,而且也是实现继承;而接口继承只是说明继承。
2.也就是说,派生类可以继承基类的方法实现,而派生的接口只继承了父接口的成员方法说明,而没有继承父接口的实现。
3.C#中类继承只允许单继承,但是接口继承允许多继承,一个子接口可以有多个父接口。
接口的覆盖:
由于接口的实现没有方法体,抽象方法也没有方法体,那么当我们在接口的实现方法里调用抽象方法时,会如何执行呢?
结果是:抽象类子类的实现方法功能
示例(覆盖):
interfaceIProgram
{
void Fun();
}
abstract class AProgram : IProgram
{
public abstract void AFun();
void IProgram.Fun()
{
AFun();
}
}
classProgram:AProgram
{
public override void AFun()
{
Console.WriteLine("I amAProgram.");
}
staticvoid Main(string[] args)
{
IProgram pro =new Program();
pro.Fun();
}
}
接口和抽象类的区别:
1.接口用于规范,抽象类用于共性。
2.接口中只能声明方法,属性,事件,索引器。而抽象类中可以有方法的实现,也以定义非静态的类变量。
3.抽象类是类,所以只能被单继承,但是接口却可以一次实现多个。
4.抽象类可以提供某些方法的部分实现,接口不可以。
5.抽象类的实例是它的子类给出的。接口的实例是实现接口的类给出的
更多精彩内容请到:http://www.gopedu.com/