C#中接口(Interface)的深入详解
定义
在C#语言中,类之间的继承关系仅支持单重继承,而接口是为了实现多重继承关系设计的。一个类能同时实现多个接口,还能在实现接口的同时再继承其他类,并且接口之间也可以继承。无论是表示类之间的继承还是类实现接口、接口之间的继承,都使用“:”来表示。
接口定义了属性、方法和事件,这些都是接口的成员。接口只包含了成员的声明。成员的定义是派生类的责任。接口提供了派生类应遵循的标准结构。接口定义了语法合同"是什么"部分,派生类定义了语法合同"怎么做"部分。
定义接口语法:
interface 接口名称
{
接口成员;
}
接口命名通常以I字母开头,例如Itest。
接口成员,不允许使用public、private、protected、internal访问修饰符,不允许使用static、virtual、abstract、sealed修饰符。不能定义字段,定义的方法不能包含方法体。
示例:定义一本书的接口,有id、名称name、定价price几个属性,和一个方法售卖价SalePrice()。
usingSystem;
namespaceapp
{
interfaceIBook
{
intId{get;set;}
stringName{get;set;}
doublePrice{get;set;}
doubleSalePrice(intdiscount);
}
}
实现
接口的实现与类的继承语法格式类似,也是重写了接口中的方法,让其有了具体的实现内容。
实现接口语法:
class 类名:接口名
{
//类中的成员以及实现接口中的成员
}
在实现接口的成员时有两种方式,隐式实现接口成员和显式实现接口成员。隐式实现接口成员是将接口的所有成员以public访问修饰符修饰。显式实现接口是指在实现接口时所实现的成员名称前含有接口名称作为前缀。
下面对一本书的接口分别使用隐式实现和显式实现。
隐式实现:
classBook:IBook
{
//隐式的实现接口中的属性
publicintId{get;set;}
publicstringName{get;set;}
publicdoublePrice{get;set;}
//隐式实现接口中的方法
publicdoubleSalePrice(intdiscount)
{
doublesalePrice=Price*discount*0.1;
returnsalePrice;
}
}
隐式实现后进行运行:
classProgram
{
staticvoidMain(string[]args)
{
Bookbook=newBook();
book.Id=1001;
book.Name="tynam";
book.Price=60;
Console.WriteLine("id:{0}",book.Id);
Console.WriteLine("书名:{0}",book.Name);
Console.WriteLine("定价:{0}",book.Price);
Console.WriteLine("售卖价:{0}",book.SalePrice(8));
}
}
运行后结果:
id:1001
书名:tynam
定价:60
售卖价:48
显式实现:
classBook:IBook
{
publicdoublePrice{get;set;}
//显示的实现接口中的属性
intIBook.Id{get;set;}
stringIBook.Name{get;set;}
//显式实现接口中的方法
doubleIBook.SalePrice(intdiscount)
{
doublesalePrice=Price*discount*0.1;
returnsalePrice;
}
}
显式实现后进行运行:
classProgram
{
staticvoidMain(string[]args)
{
Bookbook=newBook();
IBookbookDetail=book;
bookDetail.Id=1001;
bookDetail.Name="tynam";
bookDetail.Price=60;
Console.WriteLine("id:{0}",bookDetail.Id);
Console.WriteLine("书名:{0}",bookDetail.Name);
Console.WriteLine("定价:{0}",bookDetail.Price);
Console.WriteLine("售卖价:{0}",bookDetail.SalePrice(8));
}
}
运行后结果:
id:1001
书名:tynam
定价:60
售卖价:48
注意:接口无法直接进行实例化。其成员由实现接口的任何类或结构来实现。
多态
使用接口实现多态需要满足以下两个条件。
定义接口并使用类实现了接口中的成员。
创建接口的实例指向不同的实现类对象。
示例:定义一个接口名称为IBird,分别定义两个实现类Phoenix和Duck来实现接口的成员,代码如下。
interfaceIBird
{
voidfly();
}
classPhoenix:IBird
{
publicvoidfly()
{
Console.WriteLine("凤凰会飞");
}
}
classDuck:IBird
{
publicvoidfly()
{
Console.WriteLine("鸭子也会飞");
}
}
实例化后执行:
classProgram
{
staticvoidMain(string[]args)
{
IBirdphoenix=newPhoenix();
phoenix.fly();
IBirdduck=newDuck();
duck.fly();
}
}
执行结果:
凤凰会飞
鸭子也会飞
总结
到此这篇关于C#中接口(Interface)深入详解的文章就介绍到这了,更多相关C#接口(Interface)详解内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。