Интерфейсы в .Net - PullRequest
       4

Интерфейсы в .Net

0 голосов
/ 21 августа 2010

Я бы хотел использовать один и тот же код для копирования файлов на FTP-сервер и через USB.Я уже написал некоторый код, который на данный момент использует функции из пространства имен System.IO.

Чтобы минимизировать дублирование кода, я перечислил функции, которые мне нужны, из пространства имен system.IO, и яя думал о разработке интерфейса, предоставляющего аналогичные функции, а затем два класса, один для файловых операций FTP и один для локальных.

У меня есть несколько вопросов об интерфейсах:

  1. Можно ли спроектировать мой интерфейс так, чтобы организация File.* и Directory.* была сохранена (чтобы процедуры, объявленные в интерфейсе, следовали той же иерархии, что и в пространстве имен IO)?
  2. Есть ли способ для локальногооперации, чтобы просто отобразить функции из пространства имен IO в соответствующие функции интерфейса (написать что-то вроде Sub IO.File.Delete Implements IOInterface.File_Delete)?
  3. Могу ли я объявить что-то вроде Dim IOHandler As IOInterface, предполагая, что IOInterface - это имя моего интерфейса?Могу ли я тогда написать IOHandler = New LocalIOHandler и IOHandler = New FTPIOHandler, предполагая, что LocalIOHandler и FTPIOHandler - мои два класса, реализующие IOInterface?

Спасибо!
CFP.

Ответы [ 2 ]

1 голос
/ 21 августа 2010

Я не могу помочь вам с первым, я просто не понимаю, что вы имеете в виду с помощью функции hierachi, но для двух других.Нет, для этого нет синтаксиса, вам придется реализовать метод, который перенаправляет вызов в метод.Например (псевдо-треска я не писал VB в течение многих лет)

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

Для вашего третьего вы могли бы сказать, что это точка (это не единственная точка) интерфейсов, которые код потребления не должен знатьтип бетона

1 голос
/ 21 августа 2010

Вы не можете изменить существующий класс, чтобы он реализовал ваш собственный интерфейс. Однако вы можете спроектировать свой собственный интерфейс, в котором ваши методы возвращают классы, которые уже существуют - например, в пространстве имен 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 может содержать любой тип, реализующий этот интерфейс. Вы также можете позже привести его к определенному типу, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...