Код: Выделить всё
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