接口实现差异

时间:2010-05-21 00:07:20

标签: vb.net

使用像......这样的界面有什么不同。

我有一个界面

Public Interface IProDataSource

    Function read() As Integer

End Interface

然后是一个班级

Public Class DataSource : Implements IProDataSource

     Function read() As Integer Implements IProDataSource.read

         some code...

     End Function

End Class

然后我用下一个方法......但有什么区别? ......这两种方法都有效......

Dim obj As IProDataSource = New DataSource
obj.read()

vs

Dim datas as new Datasource
datas.read()

我注意到的唯一区别是,如果方法声明为私有,则仅使用第一种方法可见。

感谢任何评论!!!

3 个答案:

答案 0 :(得分:1)

如果objDataSource,则无法通过声明为接口的变量访问DataSource的非接口方法。否则,在您的示例中,确实没有区别。

注意“是一个”。

IList是一个很好的退房界面。许多对象采用或使用IList作为方法参数。 (要查看实现IList的所有类,请打开“对象浏览器”,浏览到IList并展开“派生类型”。)例如,如果我实现的是Windows.Forms控件,强制您将列表作为ArrayListCollection或其他对象传递,我可以指定IList,并且可以使用任何实现该接口的类由控制。

一个实际示例,DataSource的{​​{1}}属性接受实现ComboBox接口的任何对象,例如System.Collections.IListSystem.Data.DataSet

  

接口概述

     

接口与类一样,定义了一个集合   属性,方法和事件。   但与类不同,接口不是   提供实施。他们是   由类实现,并定义为   从类中分离实体。

     

接口代表合同   一个实现的类   接口必须实现每个方面   完全一样的界面   定义

http://msdn.microsoft.com/en-us/library/s3et34z3(VS.80).aspx

答案 1 :(得分:0)

此刻似乎使用界面是浪费精力......

但是如果明天你或其他人决定编写XMLDatasource,CSVDatasource或InternetDataSource会发生什么。

如果您使用第一种方式(Dim obj作为IProDataSource)实现您的applicatino,那么您不需要关心正在使用的数据源的。只要whaterver DataSource实现了该接口,您的程序就可以使用它。

如果您使用第二种方法(Dim数据作为新的DataSource),那么当我尝试将SuperFancyDataSource与您的程序一起使用时,您将必须完成整个程序并将所有New DataSources更改为New SuperFanceDataSource。 / p>

答案 2 :(得分:0)

从我的一位朋友那里看到这个问题:

Why is an interface or an abstract class useful? (or for what?)