显式实现接口成员

今天看了接口,看到显式接口成员实现的时候有点迷茫,上网搜了一下找了一篇不错的文章,记下来,以备后用!

显式实现接口成员

   

接口是支持一些功能的协定。实现接口的类必须为接口中指定的成员提供实现细节。例如,IEnumerator 接口定义成员签名,必须实现成员签名才能支持对一组对象(如集合)进行枚举。若要实现 IEnumerator,类必须实现 CurrentMoveNextReset 成员。

当 接口成员由类显式实现时,只能通过使用对接口的引用来访问该成员。这将导致隐藏接口成员。显式实现接口成员的常见原因:不仅是为了符合接口的协定,而且也是 为了以某种方式改进它(例如,提供应用来代替接口的弱类型方法的强类型方法)。显式实现接口成员的另一个常见原因是存在不应由开发人员调用显式接口成员的 时候。例如,GetObjectData 成员是最常显式实现的,因为它由序列化基础结构调用而不用于从代码调用。

下列设计准则有助于确保您的库设计仅在需要时使用显式接口实现。

如果没有充分理由,应避免显式实现接口成员。

要理解显式实现需要具备很高深的专业知识。例如,很多开发人员不知道显式实现的成员是可以公共调用的,即使其签名是私有的也一样。由于这个原因,显式实现的成员不显示在公共可见的成员列表中。显式实现成员还会导致对值类型的不必要装箱。

如果成员只应通过接口调用,则考虑显式实现接口成员。

这主要包括支持 .NET Framework 基础结构(如数据绑定或序列化)的成员。例如,IsReadOnly 属性只应由数据绑定基础结构通过使用对 ICollection 接口的引用来访问。由于满足此准则,List 类显式实现该属性。

考虑显式实现接口成员以模拟变体(即,更改重写成员中的参数或返回类型)。

为了提供接口成员的强类型版本,通常会这么做。

考虑显式实现接口成员以隐藏一个成员并添加一个具有更好名称的等效成员。

这样可以有效地重命名成员。例如,Stream 显式实现 Dispose 并在相应的位置提供 Close 方法。

不要将显式成员用作安全边界。

显式实现成员不提供任何安全性。通过使用对接口的引用,这些成员都是可以公共调用的。

如果显式实现的成员的功能意在由派生类特殊化,则一定要提供具有相同功能的受保护虚拟成员。

不能重写显式实现的成员。如果在派生类中重新定义成员,则派生类不能调用基类实现。应通过使用与显式接口成员相同的名称或将 Core 附加到接口成员名称来命名受保护成员。


 

转载于:https://www.cnblogs.com/leixiaoling/archive/2009/04/10/1433304.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值