今天脑力消耗太大,头有点不舒服,感觉有些小疲惫啊!!!
今天主要讲解一下C#的接口,罗列如下:
1、 什么是C#的接口?
2、 C#接口的用途?
3、 C#接口的代码范例介绍
下班了、下班了、下班了…………………………………………………………努力学习分割线
第一个问题:
什么是C#接口?
(来个稍稍官方的解释)接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为。接口可由方法、属性、事件和索引器或者4钟成员类型的任何组合构成,但不能包含字段。(尼玛,官方就是官方,菜鸟一枚,怎么理解!!)
接口可以简单说是:用来规范管理的设计方式。打个比喻,接口就是领导,领导下达一个命令开展一项旅游主题活动,领导下面的小兵们就是继承接口的类,来执行这个命令,因为每个人都有不同的思维,所以他们对这条命令的执行行为就不一样,有的人(继承接口的类)选择到日本旅游看妹纸(大家懂得),有的人选择到英国感受欧式建筑,这样每个继承接口的类就会产生不同的行为,但都是围绕一个主题(领导的命令)。也可以说,领导给个方向,但详细的事情要下面的小兵干,领导起到约束的作用。
一个类只能继承一个基类,所以C#不支持多重继承,但是客观世界出现多重继承的情况又比较多。为了避免传统的多重继承给程序带来的复杂性等问题,C# 提出了接口(接口简单不复杂)的概念,这样一个类可以继承多个接口,通过接口可以实现多重继承的功能。
接口类型似于抽象基类,继承接口的任何非抽象类型都必须实现接口的所有成员
不能直接实例化接口
接口可以包含事件,索引器,方法,和属性
接口不包含方法的实现(只定义,不实现)
类和结构可从多个接口继承
接口自身可从多个接口继承
第二个问题:
C#接口的用途?
接口就是定义一些规则,其实就是对行为(方法)的抽象;抽象类就是对类的抽象。
接口用来对实现它的类提供约束,接口就是一个契约,规范了接口实现者的行为。
接口有着很强的可扩展性,继承此接口就可以扩展接口中的方法(比如设计一个机械玩具车,留有遥控指挥的接口,现在不用,但是以后说不上它就有遥控指挥功能,这就提高了它的可可扩展性)。
接口与设计模式结合能降低耦合性,便于系统设计,便于团队分工协作,另外可以实现多重继承
缓冲内存与外设之间的速度,(2)满足不同种类的外设需求,(3)满足多设备的连接(4)实现不同类型的信号转换
抽象类里面可以有非抽象方法
但接口里只能有抽象方法
第三个问题:
C#接口的代码范例介绍
主要代码如下
using UnityEngine;
using System.Collections;
public class NewBehaviourScript :MonoBehaviour {
voidStart ()
{
IPrinta = new A();
IPrintb = new B();
IPrintc = new C();
a.Print();
b.Print();
c.Print();
}
interface IPrint //定义接口IPrint
{
void Print(); //接口内定义抽象方法
}
class A : IPrint //定义类A继承IPrint接口
{
public void Print() //实现接口内的Print方法
{
print("A");
}
}
class B : IPrint
{
public void Print()
{
print("B");
}
}
classC : IPrint // 定义类C继承接口IPrint
{
voidIPrint.Print() //实现接口内的Print方法(注意和上面实现方法不同)
{
print("C");
}
}
}
其他:
方法的重写: 定义同名且参数列表也相同的方法,并且父类中的方法用virtual进行修饰,子类中的方法用override进行了修饰。继承不能删除或减少方法。但是可以利用重写来更改继承方法
抽象方法和虚方法的区别?抽象 (abstract) 方法是没有实现的虚方法。抽象方法是只有定义、没有实际方法体的函数,它只能在抽象函数中出现,并且在子类中必须重写;虚方法则有自己的函数体,已经提供了函数实现,但是允许在子类中重写或覆盖。重写的子类虚函数就是被覆盖了。
base常用于,在派生类对象初始化时和基类进行通信,base可以访问基类的公有成员和受保护成员,私有成员是不可访问的。
this指代类对象本身,用于访问本类的所有常量、字段、属性和方法成员,而且不管访问元素是任何访问级别。因为,this仅仅局限于对象内部,对象外部是无法看到的,这就是this的基本思想。另外,静态成员不是对象的一部分,因此不能在静态方法中引用this