使用像......这样的界面有什么不同。
我有一个界面
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()
我注意到的唯一区别是,如果方法声明为私有,则仅使用第一种方法可见。
感谢任何评论!!!
答案 0 :(得分:1)
如果obj
是DataSource
,则无法通过声明为接口的变量访问DataSource的非接口方法。否则,在您的示例中,确实没有区别。
注意“是一个”。
IList
是一个很好的退房界面。许多对象采用或使用IList
作为方法参数。 (要查看实现IList
的所有类,请打开“对象浏览器”,浏览到IList
并展开“派生类型”。)例如,如果我实现的是Windows.Forms控件,强制您将列表作为Array
,List
,Collection
或其他对象传递,我可以指定IList
,并且可以使用任何实现该接口的类由控制。
一个实际示例,DataSource
的{{1}}属性接受实现ComboBox
接口的任何对象,例如System.Collections.IList
或System.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?)