C# 对两个接口之一使用单个引用

问题描述 投票:0回答:1

我定义了一个接口,试图让事情的行为方式相同

  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

c# interface
1个回答
1
投票

只需移动变量的声明即可:

IinFileMetaHandler  myInterface = null;
switch(xInterface) 
    {
      case "exiftool":
        myInterface = new InterfaceModule_exiftool(s_exifTool);
        break;
      case "openxml":
        myInterface = new InterfaceModule_openxml();
        break;
© www.soinside.com 2019 - 2024. All rights reserved.