2010-08-21 92 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