第十五章 接口
1、接口: C++中允许多继承没有接口的概念。而java与C#中有,因为C#中 是单继承多接口。
所谓的接口,其实和抽象类、方法相似。都只有一个空方法。其本身不可以为基类,但是允许被其他类继承,而后由其他类或结构实现里面的方法。
2、接口是引用类型
它和继承类似,我们之前可以通过基类的引用的实例化可以访问到派生类当中的方法。在此,我们也可以通过强制转换为接口引用,从而访问实现接口类当中的方法。
interface iifc1
{
void PrintOut(string s);
}
class myclass : iifc1
{
public void PrintOut(string s);
}
{
myclass mc11 = new myclass();
mc11.PrintOut("i lvoe you!");
iifc1 ifc = (iifc1)mc11;//将类对象的引用转换为接口类型的引用。
ifc.PrintOut("i love you!");//调用引用的方法
}
注:实现接口的类可以从它基类继承实现的代码。也就是说,我可以自己不实现,让基类实现也可以。
派生类为继承接口的。
如果两个接口函数里面都有同样的函数需要实现的话,我们可以采用显式接口成员实现。就是 在实现的时候加上接口名 即可。这样不会造成冲突。
interface iifc1
{
void PrintOut(string s);
}
interface iifc2
{
void PrintOut(string s);
}
class myclass : iifc1, iifc2
{
public void iifc1.PrintOut(string s) { }
public void iifc2.PrintOut(string s) { }
}
接口也可以继承接口,不同的类可以实现同一个接口。
第十六章 转换
隐式转换:就是自动转换。
显式转换:就是强制转换。
下面是转换的类型:
我们也可以通过 检测转换结果是否溢出的能力,叫做 溢出检测上下文。
Unchecked(表达式);
对于引用转换:有一点点不一样。
注:从衍生类(派生类)到基类的转换都是隐式转换。
装箱与拆箱:
整个装箱与拆箱的过程如下:
//下面是拆箱与装箱的过程,其实就是通过object为中介,把数据变成可转换的类型。
int i = 10;
object oi = i;//对i装箱并把引用赋值为oi
int ii = (int)oi;//对oi拆箱并把值赋值给ii
用户自定义转换:
通过关键字:implicit 与 explicit 实现。
Public static implicit operator TargetType(SourceType Identifier){ }
两种运算符 : is 与 as
is 主要是用来 检查 从一种类型转换为另一种类型是否会成功。这个有预判效果,事前判断。与unchecked 事后判断不一样。
as 与强制转换类似,假如转换失败,返回null而不抛出异常。
If(bill is Person)
{
P = bill; //这个时候才转换成功。
}
P = bill as Person;
If(p != null)
{
//已经转换成功。
}