我定义了一个接口,试图让事情的行为方式相同
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 Office 文档(docx、xlsx 等) 因此,这个界面有 2 个真实的东西
class InterfaceModule_exiftool : IinFileMetaHandler
class InterfaceModule_openxml : IinFileMetaHandler
并且显然它们具有与接口相同的方法
问题:有没有办法实例化这些东西,让所有真正的工作不关心它是什么味道。 即能够发出
'myInterface.GetProperty (pFileName , xtargetAttribute, propertyValue, fileType);'
并且它知道要采取哪条路径,因为它们是如何构建的
我尝试了以下操作,但(毫不奇怪)它给了我'CS0128:名为“myInterface”的局部变量或函数已在此范围内定义' 我想在我花几个小时尝试在 switch 语句之前定义通用对象之前先问一下。
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} ");
谢谢, JC
只需移动变量的声明即可:
IinFileMetaHandler myInterface = null;
switch(xInterface)
{
case "exiftool":
myInterface = new InterfaceModule_exiftool(s_exifTool);
break;
case "openxml":
myInterface = new InterfaceModule_openxml();
break;