2010-08-21 84 views
0

我想使用相同的代码将文件复制到FTP服务器,并通过USB。我已经编写了一些代码,它们现在使用System.IO命名空间中的函数。.Net中的接口

为了最大限度地减少代码重复,我列出了system.IO命名空间需要的函数,并且我正在考虑设计一个暴露类似函数的接口,然后是两个类,一个用于FTP文件操作,另一个用于FTP文件操作为当地人。

我有接口的几个问题,但:

  1. 可以设计我的接口,这样File.*Directory.*组织保存下来(这样在接口中声明的程序遵循比IO命名空间中的同一层次) ?
  2. 对于本地操作,是否有办法将函数从IO名称空间映射到相应的接口函数(编写类似Sub IO.File.Delete Implements IOInterface.File_Delete)?
  3. 我可以声明Dim IOHandler As IOInterface之类的东西吗?假设IOInterface是我的界面的名称?那么我可以写IOHandler = New LocalIOHandlerIOHandler = New FTPIOHandler,假设LocalIOHandlerFTPIOHandler是我的两个类实现IOInterface

谢谢!
CFP。

回答

1

您无法更改现有类,以便实现您自己的界面。但是,您可以设计自己的接口,让您的方法返回已存在的类 - 就像System.IO名称空间中的类一样。

您也可以实现自己的类封装了System.IO类,以便您IOInterface.Delete映射到FileInfo.Delete(请原谅C#语法,我的VB是生锈):

public class MyFileClass : IOInterface 
{ 
    public void DeleteFile(string fileName) 
    { 
    new FileInfo(fileName).Delete(); 
    } 
} 

回应#3: 是的。 IOInterface类型的变量可以包含实现该接口的任何类型。如果需要,您也可以稍后将其转换为特定类型。

+1

虽然没有错,但应避免downcast和concordated气味。 – 2010-08-21 08:09:27

+0

同意,但有时候这是必要的,重要的是要知道存储对象不仅仅是接口类型的实现类型。 – 2010-08-21 09:26:25

+0

所以人们总是告诉我:)但他们几乎都是出于什么时候的好例子。这就是说,我认为你是正确的在这里提到的可能性,因为它似乎OP我很新oo – 2010-08-21 09:37:29

1

我不能帮你第一个我只是不明白你的意思与功能hierachi但其他两个。不,没有语法,您必须实施将呼叫转发给方法的方法。例如。 (多年伪鳕鱼我没有写VB)

Sub open(path as string) 
    Begin 
    Return File.Open path 
    End 

为您3,你可以说,这就是问题所在(这不是唯一的点)的消费代码并不需要知道具体类型接口

+0

我的意思是,在我的界面,我会定义指定需要有儿童名称空间,文件和目录,这将举行的功能分别删除,创建等;一个文件或一个目录,就像在IO命名空间中完成的一样。 – 2010-08-21 08:19:20

+0

接口驻留在命名空间中,但可以指定对声明类所在的命名空间没有限制。进一步的文件和目录是System.IO名称空间中的_classes_。 – 2010-08-21 09:34:32

+0

那么有没有办法在目录中拥有一些子类? – 2010-08-21 10:50:02