实现接口成员的两种方式有何区别有什么用途
来源:互联网 发布:知乎 涉谷昴 编辑:程序博客网 时间:2024/05/02 01:52
若要实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。但是如果使用显示的实现方式,就可不必使用publicz关键字.为什么要提供显示的实现方式呢,他们有什么区别?
显式实现接口成员与实现接口成员的区别是方法名字前面有接口名。这样就可不使用public关键字来实现接口成员.这样就导致了在使用上有所区别.使用时的区别是如果只有显式实现,则只能通过接口类型的变量来调用该方法。如果只有非显式实现,则通过类类型变量和接口类型变量都可以调用。如果同时有两种实现,则接口类型的变量调用显式实现的方法,类类型的变量调用非显式实现方法.引用MSDN上的一个示例说明一下,示例如下:
// 声明接口
interface IDimensions
{
float Length();
float Width();
}
//声明实现接口的类
class Box : IDimensions
{
float lengthInches;
float widthInches;
public Box(float length, float width)
{
lengthInches = length;
widthInches = width;
}
// 显式接口成员实现,还可以使用public关键字实现:public float Length()
float IDimensions.Length()
{
return lengthInches;
}
// 显式接口成员实现,还可以使用public关键字实现:public float Width()
float IDimensions.Width()
{
return widthInches;
}
public static void Main()
{
// 声明类实例“myBox”:
Box myBox = new Box(30.0f, 20.0f);
// 声明接口实例“myDimensions”:
IDimensions myDimensions = (IDimensions) myBox;
// 打印出盒子的尺寸:
/* 下列注释行将产生编译
错误,因为这些行试图从类实例访问显式实现的
接口成员. 如果使用pubilc关键字实现接口则该语句可通过编译 */
//System.Console.WriteLine("Length: {0}", myBox.Length());
//System.Console.WriteLine("Width: {0}", myBox.Width());
/* 从接口的实例调用方法,
以打印出盒子的尺寸: */
System.Console.WriteLine("Length: {0}", myDimensions.Length());
System.Console.WriteLine("Width: {0}", myDimensions.Width());
System.Console.Read();
}
}
通常使用这两种方式中的任何一个都能实现借口成员.但是有什么特殊用途吗?
1.通过显示实现可以强制用户只能通过接口访问和使用方法、属性、事件、索引器。
2.在同一各类中,可以使用两种方法同时实现接口成员,这就可以分别从类实例和接口实例调用接口成员.而接口成员的这两个实现的返回类型(如果有),参数个数,参数类型完全相同,但是却可以执行不同的动作.例如:在上面的代码中加入如下代码:
// 接口成员实现:
public float Length()
{
return lengthInches+1;
}
// 接口成员实现:
public float Width()
{
return widthInches+1;
}
这种不同有什么实际意义,是否还有什么其它用途,望高手留言赐教!!
- 实现接口成员的两种方式有何区别有什么用途
- 创建String的两种方式有什么区别?
- Qt两种设置Layout的方式有什么区别
- ISP和IAP两种编程方式有何区别?
- ISP和IAP两种编程方式有何区别?
- java实现线程的两种方法有什么区别?
- 两种实现多线程的方法有什么区别
- 两种跳转方式分别是什么?有什么区别
- 两种跳转方式分别是什么?两者有什么区别?
- 两种跳转方式分别是什么?有什么区别
- 两种跳转方式分别是什么?有什么区别?
- 服务器有何用途
- const 有什么用途?(请至少说明两种)
- static有什么用途?(请至少说明两种)
- POST和GET两种方式,两种方式有什么区别
- 泡过的茶叶有何用途
- android 启动service的两种方式有什么不同
- Socket具体有什么用途?和P2P有什么区别
- SQL Server2005 异常处理机制
- 自己写的excel导入sqlserver函数
- 2003上传文件不能超过200k问题解决方法问题
- javascript 常用代码
- Excel 中给下拉框赋值
- 实现接口成员的两种方式有何区别有什么用途
- C#验证输入的是否数字的方法
- jstl中的日期格式化
- 配置Eclpise+tomcat与实现JSP部署
- String与StringBuilder 辩议
- Crypt加密函数简介(C语言)
- ibatis 学习
- 以后的日志将全部写在我自己买的空间上,http://www.aspneter.cn
- 跳出封装剖析ASP.NET脚本回调的原理