You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何通过单一接口实例化不同实现类以统一调用方法

问题解决:CS0128 变量重复定义错误

错误原因

你在switch的每个case分支里用var声明myInterface,但C#中switch块属于同一个作用域,多个分支里的同名变量会触发重复定义错误。同时,分支内定义的变量作用域仅限当前case,switch外部无法访问,这也会导致后续调用myInterface.GetProperty时找不到变量。

正确实现方式

在switch外部先声明接口类型的变量,再在各个分支中为其赋值具体实现类的实例,既避免重复定义,又能保证后续代码通过接口统一调用方法:

// 先在switch外部声明接口类型变量
IinFileMetaHandler myInterface = null;

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

// 确认实例化成功后调用方法
if (myInterface != null)
{
    int rc = myInterface.GetProperty(pFileName, xtargetAttribute, propertyValue, fileType);
    Console.WriteLine($" ===>  propertyValue= {propertyValue} ");
}

额外优化建议

  • 可以用工厂模式封装实例化逻辑,把switch判断抽离到单独的工厂类中,后续新增文件类型实现时,只需修改工厂类,业务代码无需变动,更符合开闭原则。
  • 注意接口方法的propertyValue参数:如果需要从方法内部输出值,建议改为out string propertyValue或ref string propertyValue,否则当前代码中对该参数的赋值无法传递到外部(取决于你的实际实现逻辑)。

内容的提问来源于stack exchange,提问作者jc508

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 07:30:58