三种不同的接口实现方式
2010-06-30 11:05
316 查看
一般来说.NET提供了三种不同的接口实现方式,分别为隐式接口实现、显式接口实现、混合式接口实现。这三种方式各有各的特点。
首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式。下面让我们来看一个隐式接口实现的例子:
Code
highlighting produced by Actipro CodeHighlighter
(freeware) http://www.CodeHighlighter.com/
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为了禁止客户直接调用实现类而硬性规定的。下面我们来看显式接口实现的例子:
Code
highlighting produced by Actipro CodeHighlighter
(freeware) http://www.CodeHighlighter.com/
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();
}
上面的代码中有两个地方会报错,这是因为我们在报错的地方违反了显式接口实现的约束。
首先来看隐式接口实现,这恐怕是我们使用最多的一种接口实现,因为隐匿接口实现是.NET的默认接口实现方式。下面让我们来看一个隐式接口实现的例子:
Code
highlighting produced by Actipro CodeHighlighter
(freeware) http://www.CodeHighlighter.com/
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为了禁止客户直接调用实现类而硬性规定的。下面我们来看显式接口实现的例子:
Code
highlighting produced by Actipro CodeHighlighter
(freeware) http://www.CodeHighlighter.com/
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();
}
上面的代码中有两个地方会报错,这是因为我们在报错的地方违反了显式接口实现的约束。
相关文章推荐
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- 实现ListView 三种不同布局的加载的方式
- .NET中的三种接口实现方式
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- MFC三种不同方式实现图形的保存和重绘---方法一:通过集合类CPtrArray保存点的坐标
- MFC三种不同方式实现图形的保存和重绘---方法一:通过兼容DC(CompatibleDC)的方式
- JAVA多线程实现的三种方式(继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程)
- 从零开始学Android之监听器实现监听动作的三种方式(匿名内部类,独立类,接口方式)
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- 浅谈Java 三种方式实现接口校验
- 三种方式实现远程restful 接口调用
- RecyclerView加载更多数据的三种不同的实现方式
- .NET中的三种接口实现方式
- WebSocket不同版本的三种握手方式以及一个Netty实现JAVA类
- .NET中的三种接口实现方式
- HTML散点图(Scatter Plot)的三种不同实现方式性能比较
- Java多线程的三种实现方式(重点看Collable接口实现方式)
- JAVA多线程实现方式主要有三种:继承Thread类、实现Runnable接口、使用ExecutorService、Callable、Future实现有返回结果的多线程。其中前两种方式线程执行完后都没
- NET中的三种接口实现方式