您的位置:首页 > 其它

实现接口成员的两种方式有何区别有什么用途

2007-04-18 17:31 316 查看
若要实现接口成员,类中的对应成员必须是公共的、非静态的,并且与接口成员具有相同的名称和签名。但是如果使用显示的实现方式,就可不必使用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;
}
这种不同有什么实际意义,是否还有什么其它用途,望高手留言赐教!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐