安全接口 interface --显示实现接口
2007-12-28 11:45
399 查看
前言:
当我们定义接口的成员的时候不需要写访问控制符,因为它是默认public的,也只能是public。当一个类要实现这个接口的时候,自然要公开其成员。一直以来我都这么做。
interface Interface1
class Class1:Interface1
}
然而这么做并没有错。直到我学习控件开发的时候,发现了原来接口可以这么来实现。
public class DropDownList : ListControl, IPostBackDataHandler
class Class1:Interface1
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
Interface1 i = (Interface1)c;
System.Console.WriteLine(i.GetName("Eric Wen"));
}
}
我觉得这样更符合oo,接口的方法不会泛用,实现和调用都和清晰。
后续:
看了回复后知道这种情况就是显示实现接口(Explicit interface member implementations)。
显示实现接口说明:
1、不能在方法调用、属性访问以及索引指示器访问中通过全权名访问显式接口成员执行体。事实上,显式接口成员执行体只能通过接口的实例,仅仅引用接口的成员名称来访问。
2、显式接口成员执行体不能使用任何访问限制符,也不能加上abstract, virtual, override或static 修饰符。
3、显式接口成员执行体和其他成员有着不同的访问方式。因为不能在方法调用、属性访问以及索引指示器访问中通过全权名访问,显式接口成员执行体在某种意义上是私有的。但它们又可以通过接口的实例访问,也具有一定的公有性质。
4、只有类在定义时,把接口名写在了基类列表中,而且类中定义的全权名、类型和返回类型都与显式接口成员执行体完全一致时,显式接口成员执行体才是有效的
5、如果一个类中既显示又隐式的实现了接口,这是显示元素只能通过接口的引用来直接访问,隐式元素只可以通过类来直接访问。
为什么要显示实现接口呢,目的:
1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。
2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。
参考:http://www.chinaitpower.com/A/2004-12-09/136479.html
当我们定义接口的成员的时候不需要写访问控制符,因为它是默认public的,也只能是public。当一个类要实现这个接口的时候,自然要公开其成员。一直以来我都这么做。
interface Interface1
class Class1:Interface1
}
然而这么做并没有错。直到我学习控件开发的时候,发现了原来接口可以这么来实现。
public class DropDownList : ListControl, IPostBackDataHandler
class Class1:Interface1
class Program
{
static void Main(string[] args)
{
Class1 c = new Class1();
Interface1 i = (Interface1)c;
System.Console.WriteLine(i.GetName("Eric Wen"));
}
}
我觉得这样更符合oo,接口的方法不会泛用,实现和调用都和清晰。
后续:
看了回复后知道这种情况就是显示实现接口(Explicit interface member implementations)。
显示实现接口说明:
1、不能在方法调用、属性访问以及索引指示器访问中通过全权名访问显式接口成员执行体。事实上,显式接口成员执行体只能通过接口的实例,仅仅引用接口的成员名称来访问。
2、显式接口成员执行体不能使用任何访问限制符,也不能加上abstract, virtual, override或static 修饰符。
3、显式接口成员执行体和其他成员有着不同的访问方式。因为不能在方法调用、属性访问以及索引指示器访问中通过全权名访问,显式接口成员执行体在某种意义上是私有的。但它们又可以通过接口的实例访问,也具有一定的公有性质。
4、只有类在定义时,把接口名写在了基类列表中,而且类中定义的全权名、类型和返回类型都与显式接口成员执行体完全一致时,显式接口成员执行体才是有效的
5、如果一个类中既显示又隐式的实现了接口,这是显示元素只能通过接口的引用来直接访问,隐式元素只可以通过类来直接访问。
为什么要显示实现接口呢,目的:
1、因为显式接口成员执行体不能通过类的实例进行访问,这就可以从公有接口中把接口的实现部分单独分离开。如果一个类只在内部使用该接口,而类的使用者不会直接使用到该接口,这种显式接口成员执行体就可以起到作用。
2、显式接口成员执行体避免了接口成员之间因为同名而发生混淆。如果一个类希望对名称和返回类型相同的接口成员采用不同的实现方式,这就必须要使用到显式接口成员执行体。如果没有显式接口成员执行体,那么对于名称和返回类型不同的接口成员,类也无法进行实现。
参考:http://www.chinaitpower.com/A/2004-12-09/136479.html
相关文章推荐
- 安全接口 interface --显示实现接口
- 显示实现和隐式实现接口的区别(Implicit and Explicit Interface Implementations)
- 显示接口成员实现(explicit interface member implementation)总结
- 27:接口的显示实现有什么作用
- JavaScript设计模式--实现接口Interface
- TreeSet 实现排序接口 安全删除的例程
- c#显示实现接口和隐式实现的区别
- Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
- Interface, 接口的实现初解
- 无法实现接口成员,因为它不是公共的-----------interface
- C#接口的显示实现和隐示实现
- 接口的显示实现和隐式实现一点笔记
- Android 通过蒲公英pgyer的接口 Service 实现带进度下载App 通知栏显示 在线更新 自动更新Demo
- Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?
- 接口的隐式和显示实现
- JAVA 构造器, extends[继承], implements[实现], Interface[接口], reflect[反射], clone[克隆], final, static, abstrac
- Java的接口Interface和接口实现Implentmens的理解
- 小议C#接口的隐式与显示实现
- 设计模式之Programming to an Interface, not anImplementation 程序指向接口,而不是实现
- WAS应用系列:WAS6 自定义用户注册接口代码 + 企业应用安全角色配置 + WAS安全配置 实现统一灵活的集成授权