黑马程序员技术交流社区
标题:
求通俗讲解接口
[打印本页]
作者:
韩继新
时间:
2013-9-28 16:29
标题:
求通俗讲解接口
本帖最后由 韩继新 于 2013-9-29 10:27 编辑
网上看了些讲解接口的,写的好长,看完了还是不清楚接口是怎么回事?
希望可以通俗的给我讲解下,什么是接口、什么情况下用接口、接口有什么优点。最好加上简单易懂的小例子哦
作者:
☜⑦圊⑥慾➹沼
时间:
2013-9-28 16:44
什么是接口?
接口是一种用来定义程序的协议,它描述可属于任何类或结构的一组相关行为
接口是这样定义的: 接口,里面包含方法,但是没有方法的具体实现。
然后在继承该接口的类中 去实现接口中的所有方法。包括 属性、方法、事件、索引器,但是不能包括字段;
接口中只能包含 属性、方法、事件、索引器;
接口可以实现C# 中的多继承。(c#不可以多继承,用接口可以实现) 接口可以继承接口,可以继承多个接口;
类可以继承接口,但是继承的类必须去实现接口中的方法代码。
接口不能直接被实例化
接口一般不用什么修饰符,因为接口默认的修饰符是 public 公共的。
接口中的所有成员默认为public,因此接口中不能有private修饰符
接口的好处:
对类的一种约束。
如果一个项目的需求可能在不断变化的情况下,用接口可以很容易进行拓展,并不影响以前写的功能模块的代码,只要新添加类,继承这个接口就可以了。
如果每个类都要用到一些公用的属性字段或者方法,则通过继承接口可以方便的实现,不用再每个类中都写一次公用的属性或方法。
接口中不能包含【常量、字段(域)、构造函数、析构函数、静态成员】
作者:
于振发
时间:
2013-9-28 17:42
1 接口是一种程序规范,接口中的方法必须要去实现.在写面向对象思想的程序时,在涉及到业务逻辑的类设计之前,一般先进行接口设计,也就是先做好基本的框架,在实施过程中,用类直接去继承接口,实现接口中定义的方法!首先接口也是一种类型,这样就实现了多态的概念,例如:可以将基接口直接转换为子类,或者相互间的转换!~~
2 当你在命名空间下定义了一个接口后,你可以在其他类中直接继承这个接口;例如:
public interface IDataLayer
{
public void DataRow[] GetDataRows(string TableName);
}
Class Datalayer:IDataLayer //继承于已定义的接口
{
DataLayer{} //构造函数
public DataRow[] GetDataRows(string TableName)
{
///实现代码
}
DataLayer _dataServices = new DataLayer();//实例化这个对象后,其实他可以直接转换为IDataLayer baseObject=_dataServices;
}
作者:
leayon
时间:
2013-9-28 17:45
楼上说的是概念,我就给你些例子吧。
假如:有一个自定义的集合类MyAnimalList,要让这个类实现集合的一些基本功能,那么就要让它继承IEnumerable接口、ICollection接口、IList接口或者IDictionary接口。代码如下:
class MyAnimalList<T> : IEnumerable,ICollection,IList
{
//类的成员
}
以上代码中的类继承自三个接口:IEnumeable、ICollection、IList。这三个接口分别有不同的功能,IEnumerable接口可以实现迭代集合中的项的功能,ICollection接口可以获取集合中项的个数,IList接口提供了集合中项的列表,并可以通过索引访问集合中的项的功能。由以上三点可以看出,一个类如果继承了一个接口,那么它就可以实现这个接口的功能。每个接口都有它不同的功能,当你的类想要使用这个功能的时候,你就可以让该类继承这个接口并实现它。又比如说,如果MyAnimalList类没有继承自IList接口,而是继承自IDictionary接口,那么这个类也可以提供集合中项的列表,但是我们不能通过索引来访问集合中的项,因为IDictionary接口只允许通过键值对来访问集合中的项。
如果你现在不懂集合框架的话,可以先不用管自定义集合类这个东西,没多大影响,你只需看接口部分就OK了。
作者:
-___Is、_C
时间:
2013-9-28 20:24
接口把一组公共方法和属性组合起来 ,以封装特定功能的一个集合。通过类可以实现接口,这样类就支持接口所有的属性和方法。
接口只能对方法和属性进行定义,不能实现,只能由支持它的类实现。接口中的成员不能用访问符修饰,如public,private,它的成员默认为public
public interface IMyinterface
{
void Dosomething();//方法成员
int MyAttribute//属性成员
{
get;//这里只能定义这个属性是否为只读
set;
}
}
接口和抽象类比较相似,但一个类只能派生于一个抽象类,不过可以实现N个接口。
作者:
段朝骞
时间:
2013-9-28 20:31
接口使类更加规范
接口具有下列属性:
接口类似于抽象基类:实现接口的任何非抽象类型都必须实现接口的所有成员。
不能直接实例化接口。
接口可以包含事件、索引器、方法和属性。
接口不包含方法的实现。
类和结构可继承多个接口。
接口自身可从多个接口继承。
例如:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace vs1.test
{
class Program
{
static void Main(string[] args)
{
//People p = new People("zs");//不能创建接口实例
People peMan = new Man();
People peWomen = new Women();
//peMan.name = "xiaoming";
peWomen.Name = "zhangsan";
peMan.Speak();
peWomen.Speak();
//peMan.GanHuo(); 不存在
//peWomen.FengYiFu();不存在
Console.WriteLine(peMan.Name);
Console.WriteLine(peWomen.Name);
//peWomen[1]; 索引器也无法使用
//peMan[1]; 索引器也无法使用
Women woWomen = new Women();
woWomen.FengYiFu();
woWomen.Name = "lis";
woWomen.Speak();
Console.WriteLine(woWomen[1, "xiaobai"]);
Console.ReadKey();
}
}
interface People
{
//public People(string name) { this.name = name; } //接口不能包含构造函数
//private string name; //接口不能包含字段
string Name //public修饰符不能用
{
set;
get;
}
void Speak(); //public修饰符不能用
//{
// Console.WriteLine("interface Speak()"); //方法体不能定义
//}
string this[int index, string name] //public修饰符不能用
{
get;
//set;
}
}
class Man : People
{
public string Name { set; get; } //必须要实现接口的属性
public void Speak() //必须要实现接口的方法
{ Console.WriteLine("Man Speak()"); }
public void GanHuo()
{
Console.WriteLine("男人干累活");
}
public string this[int index,string name] //必须要实现接口的索引器
{
//set { this.Name = name; } //至少要有一个访问器
get { return Name; }
}
}
class Women : People
{
public string Name { set; get; }
public void Speak() { Console.WriteLine("Women Speak()"); }
public void FengYiFu()
{
Console.WriteLine("女人逢衣服");
}
public string this[int index,string name]
{
//set { this.Name = name; }
get { return Name; }
}
}
}
复制代码
所有实现接口的类必须要重写接口中的内容,要求方法名和签名必须一致
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2