Java和C#中的接口对比(有你不知道的东西)
1.与Java不同,C#中的接口不能包含字段(Field)。
在java中,接口中可以包含字段,但是这些字段隐式地是static和final的。而C#不允许接口中有字段,编译器在编译时就会提示错误(如下代码所示)。
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(, ));//正确运行,没有提示错误
} 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(, );//编译器提示错误:“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(, ));//正确运行,没有提示错误
}
从以上结果,我们可以看出如果是显示实现接口,那么对接口中方法的访问必须要通过接口类型的引用,用显示实现了接口的类是没有办法使用的。
显式接口成员实现的两个主要用途
· 由于显式接口成员实现不能通过类或结构实例来访问,因此它们就不属于类或结构的自身的公共接口。当需在一个公用的类或结构中实现一些仅供内部使用(不允许外界访问)的接口时,这就特别有用。
· 显式接口成员实现可以消除因同时含有多个相同签名的接口成员所引起的多义性。如果没有显式接口成员实现,一个类或结构就不可能为具有相同签名和返回类型的接口成员分别提供相应的实现,也不可能为具有相同签名和不同返回类型的所有接口成员中的任何一个提供实现。
Java和C#中的接口对比(有你不知道的东西)的更多相关文章
- java 9+版本中,接口的内容总结
java 9+版本中,接口的内容可以有: 1.成员变量其实是常量,格式: [public] [static] [final] 数据类型 常量名称=数据值: 注意: 常量必须进行赋值,而且一旦赋值不 ...
- [ 原创 ] Java基础3--Java中的接口
一.使用接口(interface)的目的 Java只支持单继承,即一个类最多只能继承一个直接父类,接口的主要功能就是可以实现类似于类的多重继承的功能. 二.接口的性质 1.接口具有继承性,即子接口可继 ...
- Java集合框架中Map接口的使用
在我们常用的Java集合框架接口中,除了前面说过的Collection接口以及他的根接口List接口和Set接口的使用,Map接口也是一个经常使用的接口,和Collection接口不同,Map接口并不 ...
- Java集合框架中List接口的简单使用
Java集合框架可以简单的理解为一种放置对象的容器,和数学中的集合概念类似,Java中的集合可以存放一系列对象的引用,也可以看做是数组的提升,Java集合类是一种工具类,只有相同类型的对象引用才可以放 ...
- phonegap与H5中的接口对比
接口 HTML5 phonegap 差异 地理定位 geolocation 单次定位: navigator.geolocation.getCurrentPosition(Success, [error ...
- java.lang和java.lang.annotation中实现Annotation的类小结
加了注解,等于打上了某种标记,没加,则等于没有某种标记,以后,其他程序可以用反射来了解你的类上面有无何种标记,看你有什么标记,就去干相应的事.标记可以加在类,方法,字段,包上,方法的参数上. (1) ...
- java中的接口interface
关于接口 接口描述了实现了它的类拥有什么功能.因为Java是强类型的,所以有些操作必须用接口去约束和标记.接口作为类的能力的证明,它表明了实现了接口的类能做什么. 类似与class,interface ...
- 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案
方案特点: 在网页程序或Java程序中调用接口实现短信猫收发短信的解决方案,简化软件开发流程,减少各应用系统相同模块的重复开发工作,提高系统稳定性和可靠性. 基于HTTP协议的开发接口 使用特点在网页 ...
- 理解Java中的接口
一.为什么要使用接口 假如有一个需求:要求实现防盗门的功能.门有"开"和"关"的功能,锁有"上锁"和"开锁"的功能. 分 ...
随机推荐
- 在django中使用自定义标签实现分页功能
效果演示: github地址:https://github.com/mncu/django_projects/tree/master/django_projects/pagination_test 本 ...
- 通过微信企业号发送zabbix报警
采用微信报警时,管理员账户中必须要设置"示警媒体"一项,"收件人"一项可随便填写一下.其它成员则可以不用添加设置. ---------------------- ...
- mysql 查询去除空格字符然后倒入新表
/* 导入数据的时候,有空白字符,去除一下然后导出. 四年前干的事,现在再干一遍. */ $dbhost= '127.0.0.1'; $dbuser= 'root'; $dbpass= '123456 ...
- ibatis XML标签的含义
selectKey: 有3个主要的属性: 1)resultClass:返回的主键的数据类型,跟sqlMap中的数据类型一致: 2)type:表示主键在insert之前或之后生成(取决于 ...
- SPI数据传输(库函数方法)
主机端: /********************************* 代码功能:SPI数据传输(主机端) 引脚说明: SS/CS:片选(高电平屏蔽,低电平启用) MOSI :主机送出信号 M ...
- 高频交易策略[z]
Market Order以最高速下市价单(market order)是买方最基本的策略 Looking for Price Discrepancies 这个就是高频统计套利(high frequenc ...
- OpenFileDialog - 设置 - Filter 笔记
using (OpenFileDialog fileSelectDialog = new OpenFileDialog()) { fileSelectDialog.Multiselect = fals ...
- TransactionScope 事务使用说明
TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间.它的用途是为数据库访问提供了一个“轻量级”[区别于:SqlTransaction]的事物.使用之前必须添 ...
- Tomcat Xms Xmx PermSize MaxPermSize 区别 及 java.lang.OutOfMemoryError: PermGen space 解决
解决方案 在 catalina.bat 里的 蓝色代码前加入: 红色代码 rem ----- Execute The Requested Command ----------------------- ...
- JQuery UI Autocomplete与jquery.autocomplete.js
程序中要把一个select改成可以下拉搜索的,就想到了使用下autocomplete.js大概是这么个东西. 问了下同学,推荐我使用Jquery Ui autocomplete,下载下来开始调试使用, ...