C# использует одну ссылку для одного из двух интерфейсовC#

Место общения программистов C#
Anonymous
C# использует одну ссылку для одного из двух интерфейсов

Сообщение Anonymous »

Я определил интерфейс, пытаясь заставить все вести себя одинаково

Код: Выделить всё

  interface IinFileMetaHandler
{
public int GetProperty (string fileName, string propertyName,  string propertyValue, string fileType);
public int SetProperty (string fileName, string propertyName, string propertyValue, string fileType);
}
Сценарий использования — чтение и запись метаданных в файлы разных типов.
Изначально существует один для файлов изображений (jpg, tiff и т. д.) и один для офисных документов openxml. (docx, xlsx и т. д.)
Таким образом, из этого интерфейса происходят две реальные вещи

Код: Выделить всё

class InterfaceModule_exiftool : IinFileMetaHandler
class InterfaceModule_openxml : IinFileMetaHandler
и, очевидно, у них те же методы, что и у интерфейса.
Вопрос: есть ли способ создать экземпляры этих вещей, чтобы вся реальная работа не выполнялась неважно, какой это вариант.
т.е. иметь возможность выдавать 'myInterface.GetProperty (pFileName, xtargetAttribute, propertyValue, fileType);', и он знает, какой путь выбрать, в зависимости от того, как они были созданы p>
Я попробовал следующее, но (что неудивительно) выдает 'CS0128: локальная переменная или функция с именем 'myInterface' уже определена в этой области'
Я подумал, что спрошу, прежде чем тратить часы на определение универсального объекта перед оператором переключения.

Код: Выделить всё

   switch(xInterface)
{
case "exiftool":
var myInterface = new InterfaceModule_exiftool(s_exifTool);
break;
case "openxml":
var myInterface = new InterfaceModule_openxml();
break;
default:
Logger.Error($"Error! No code module known to handle '{xInterface}'. Check XML" );
return 4;
}

int rc = myInterface.GetProperty (pFileName  , xtargetAttribute, propertyValue,   fileType);
Console.WriteLine($" ===>  propertyValue= {propertyValue} ");
Спасибо,
Джей Си

Подробнее здесь: https://stackoverflow.com/questions/788 ... interfaces

Вернуться в «C#»