1、接口就是一组抽象成员的集合。
2、一个类(或者一个结构)可以支持任意数量的接口,因此也就支持了多种行为。
3、最佳实践:.NET接口多以大写字母“I”作为前缀。
4、接口不指定基类,即使是System.Object也不行,然而,接口可以指定基接口。
当我们定义接口成员时,不需要为这个成员定义实现作用域;接口是纯粹的协议,因此也不会定义实现(留给支持的类或结构)
example: public interface IPointy
{
//隐式公共和抽象的
byte GetNumberOfPoints();
}
5、接口类型可以包含事件(event),以及索引器定义和属性协议。
6、实现接口是一个“要么全要,要么全不用”的命题。及支持类型必须实现接口中定义的所有成员。
7、所提供的接口成员不能是显示实现的。
8、在运行时判断一个类型是否支持一个指定接口:
(1):使用显示强制转换
example: static void Main(string[] args)
{
Circle c=new Circle("Lisa");
IPointy itfpt=null;
try
{
itfpt=(IPointy)c;
Console.WriteLine(itfpt.Points);
}
catch(exception e)
{
Console.WriteLine(e.Message);
}
}
(2):使用as关键字
example: static void Main(string[] args)
{
Hexagon hex2=new Hexagon("Peter");
IPointy itfpt2=hex2 as IPointy;
if(itfpt2!=null)
Console.WriteLine(itfpt2.Points);
else
Console.WriteLine("not Points");
}
(3):使用is关键字
9、接口是有效的.NET类型,可以构造将接口作为参数的方法。同样,接口也可以被用来作为方法的返回值。
10、通过显式接口实现 解决命名冲突
returnType InterfaceName.MethodName(params)
2、一个类(或者一个结构)可以支持任意数量的接口,因此也就支持了多种行为。
3、最佳实践:.NET接口多以大写字母“I”作为前缀。
4、接口不指定基类,即使是System.Object也不行,然而,接口可以指定基接口。
当我们定义接口成员时,不需要为这个成员定义实现作用域;接口是纯粹的协议,因此也不会定义实现(留给支持的类或结构)
example: public interface IPointy
{
//隐式公共和抽象的
byte GetNumberOfPoints();
}
5、接口类型可以包含事件(event),以及索引器定义和属性协议。
6、实现接口是一个“要么全要,要么全不用”的命题。及支持类型必须实现接口中定义的所有成员。
7、所提供的接口成员不能是显示实现的。
8、在运行时判断一个类型是否支持一个指定接口:
(1):使用显示强制转换
example: static void Main(string[] args)
{
Circle c=new Circle("Lisa");
IPointy itfpt=null;
try
{
itfpt=(IPointy)c;
Console.WriteLine(itfpt.Points);
}
catch(exception e)
{
Console.WriteLine(e.Message);
}
}
(2):使用as关键字
example: static void Main(string[] args)
{
Hexagon hex2=new Hexagon("Peter");
IPointy itfpt2=hex2 as IPointy;
if(itfpt2!=null)
Console.WriteLine(itfpt2.Points);
else
Console.WriteLine("not Points");
}
(3):使用is关键字
9、接口是有效的.NET类型,可以构造将接口作为参数的方法。同样,接口也可以被用来作为方法的返回值。
10、通过显式接口实现 解决命名冲突
returnType InterfaceName.MethodName(params)