C#和Java中的接口
2016-06-21 11:08
267 查看
1.与Java不同,C#中的接口不能包含字段(Field)。
在java中,接口中可以包含字段,但是这些字段隐式地是static和final的。而C#不允许接口中有字段,编译器在编译时就会提示错误(如下代码所示)。
<pre name="code" class="csharp" style="font-size: 15px;">interface IInterface { int a ;//编译器错误提示:接口不能包含字段 }
2、在C#和Java中,接口内的所有方法默认都是公用方法。
在Java中,方法声明可以带有public修饰符(即使这并非必要),但在C#中,显式地为接口中的方法指定public修饰符是非法的。例如,下面的代码将产生一个编译错误。
interface IInterface { public int add();//错误提示:修饰符“public”对该项无效 }
3、C#中特有的实现接口和显式实现接口.
普通实现接口:
interface IInterface { int add(int a,int b) ; } class Program:IInterface { static void Main(string[] args) { Program ii = new Program(); //使用实体类来访问自己的接口函数 Console.WriteLine(ii.add(1, 2));//正确运行,没有提示错误 } public int add(int a, int b) { return a + b; } }
显示地实现接口:
interface IInterface { int add(int a,int b) ;//编译器错误提示:接口不能包含字段 } class Program:IInterface { static void Main(string[] args) { Program newProgram = new Program(); newProgram.add(1, 2);//编译器提示错误:“ConsoleApplication3.Program”不包含“add”的定义, //并且找不到可接受类型为“ConsoleApplication3.Program”的第一个参数的扩展方法“add”(是否缺少 using 指令或程序集引用?) } int IInterface.add(int a, int b)//显示实现接口,注意这个方法多了IIterface限定符 { return a + b; } }
另外,我们注意到显式实现接口后int IInterface.add(int a, int b)中少了public修饰符,但是我们一加上编译器又会提示错误:“修饰符“public”对该项无效”。另外因为是Program类访问自身的方法,所以访问性也不是构成add()方法无法访问的原因。如果我们将main()函数中的代码修改一下,将new Program()的变量赋给IIterface的引用,再看看结果如何static void Main(string[] args)
{
IInterface ii = new Program();
Console.WriteLine(ii.add(1, 2));//正确运行,没有提示错误
}
从以上结果,我们可以看出如果是显示实现接口,那么对接口中方法的访问必须要通过接口类型的引用,用显示实现了接口的类是没有办法使用的。
显式接口成员实现的两个主要用途
· 由于显式接口成员实现不能通过类或结构实例来访问,因此它们就不属于类或结构的自身的公共接口。当需在一个公用的类或结构中实现一些仅供内部使用(不允许外界访问)的接口时,这就特别有用。· 显式接口成员实现可以消除因同时含有多个相同签名的接口成员所引起的多义性。如果没有显式接口成员实现,一个类或结构就不可能为具有相同签名和返回类型的接口成员分别提供相应的实现,也不可能为具有相同签名和不同返回类型的所有接口成员中的任何一个提供实现。相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树