一般来说.NET提供了三种不同的接口实现方式,分别为隐式接口实现、显式接口实现、混合式接口实现。这三种方式各有各的特点。
首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式。下面让我们来看一个隐式接口实现的例子:
以下是引用片段: using System; internal class MyClass { public void SomeMethod() { // 利用接口的方式声明一个Myinplement对象 IMyInterface iObj = new MyInplement(); iObj.MethodA(); // 利用类的方式声明一个Myinplement对象 MyInplement obj = new MyInplement(); obj.MethodB(); } } public class MyInplement : IMyInterface { #region IMyInterface Members /// /// 利用隐式接口实现方式实现接口中的方法 /// public void MethodA() { Console.WriteLine(“a”); } /// /// 利用隐式接口实现方式实现接口中的方法 /// public void MethodB() { Console.WriteLine(“B”); } #endregion } public interface IMyInterface { void MethodA(); void MethodB(); } |
上面的代码很简单,我们声明了一个接口,然后利用MyImplement类来实现接口。在实现接口的时候我们选择了隐式接口实现,即在接口中定义的方法签名前加上修饰符来定义实现方法的签名,比如public voidMethodB()。这种隐式接口实现用起来很简单,但却有一个缺点,就是它允许客户可以直接调用实现类中的方法,(即通过MyInplementobj = newMyInplement()这样的方式声明对象)而不是通过接口调用实现类中的方法(即通过的IMyInterface iObj = new MyInplement();方式来声明对象),这无疑增加了代码的耦合性和违反了面向接口编程的原则。那怎么样才能禁止客户直接调用实现类呢? 下面我们看的显式接口实现就可以。
显式接口实现是指实现类在实现接口的方法时在方法的签名上用”接口名.方法名”的样式来定义方法名,同时在方法的签名中不允许带有修饰符,因为所有显式接口实现的方法全是private的,这是.NET为了禁止客户直接调用实现类而硬性规定的。下面我们来看显式接口实现的例子:
以下是引用片段: using System; internal class MyClass { public void SomeMethod() { // 利用接口的方式声明一个Myinplement对象 IMyInterface iObj = new MyInplement(); iObj.MethodA(); // 利用类的方式声明一个Myinplement对象,会报错,因为MyImplement的MethodA方法是private的 MyInplement obj = new MyInplement(); obj.MethodB(); } } public class MyInplement : IMyInterface { #region IMyInterface Members /// /// 利用显式接口实现方式实现接口中的方法 /// void IMyInterface.MethodA() { Console.WriteLine(“a”); } /// /// 利用显式接口实现方式实现接口中的方法 /// 会报错,因为在显式接口实现时不允许带有修饰符 /// public void IMyInterface.MethodB() { Console.WriteLine(“B”); } #endregion } public interface IMyInterface { void MethodA(); void MethodB(); } |
上面的代码中有两个地方会报错,这是因为我们在报错的地方违反了显式接口实现的约束。
最后让我们来看混合式接口实现,混合式接口实现就是将隐式接口实现和显式接口实现搭在一起使用,下面让我们来看一个例子:
以下是引用片段: using System; internal class MyClass { public void SomeMethod() { // 利用接口的方式声明一个Myinplement对象 IMyInterface iObj = new MyInplement(); iObj.MethodA(); // 利用类的方式声明一个Myinplement对象,不会报错,因为MyImplement的MethodA方法是public的 MyInplement obj = new MyInplement(); obj.MethodB(); } } public class MyInplement : IMyInterface { #region IMyInterface Members /// /// 利用显式接口实现方式实现接口中的方法 /// void IMyInterface.MethodA() { Console.WriteLine(“a”); } /// /// 利用隐式接口实现方式实现接口中的方法 /// public void MethodB() { Console.WriteLine(“B”); } #endregion } public interface IMyInterface { void MethodA(); void MethodB(); } |
上面的代码中我们将MehtodB的实现改为隐式接口实现,这样MyImplement.Method的修饰符就是public的了,代码中就没有错了。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
相关推荐
-
.NET架构师:函数式语言做领域驱动设计
Scott一位.NET架构师,同时也是掌握函数式编程的作者,他很欣赏函数式编程,对于Scott来说,面向对象编程的那些概念也很恐怖,比如多态、泛型、继承、协变等。
-
软件开发就像炒股 关键看你怎么选股票!
本文作者Paulo Ortins在这里分享了对于选择哪种编程语言作为软件开发工作的起点的话题,并阐述了自己的观点。
-
增进离岸Java开发效率的十个提示
近日,Cygnet Infotech公司发布了一篇博文,谈到了如何增进离岸Java开发的效率。众多的ISV与软件厂商总是在不断寻找能以最低的代价实现其业务目标的解决方案。
-
Visual Studio 2013增强调试功能
Visual Studio 2013包含了若干诊断特性,能够帮助开发人员有效地调试他们的应用程序。