【问题标题】:How to map interface names to different method names?如何将接口名称映射到不同的方法名称?
【发布时间】:2009-09-07 18:43:47
【问题描述】:

如果我有一个实现接口的对象,默认情况下,它会自动将接口方法映射到具有相同名称和签名的类的方法上。有没有办法覆盖它并将接口方法映射到具有相同签名但名称不同的方法? (这可能很有用,例如,如果我实现了两个接口,它们都有一个名称和签名相同的方法,并且我希望能够用它们做不同的事情。)

【问题讨论】:

    标签: delphi interface


    【解决方案1】:

    这是欧文回答的代码示例

    type
      ISomeInterface = interface
        procedure SomeMethod;
      end;
    
      IOtherInterface = interface
        procedure SomeMethod;
      end;
    
      TSomeClass = class(TInterfacedObject, ISomeInterface, IOtherInterface)
      public
        procedure ISomeInterface.SomeMethod = SomeInterfaceSomeMethod;    
        procedure IOtherInterface.SomeMethod = OtherInterfaceSomeMethod;    
    
        procedure SomeMethod;                // TSomeClass.SomeMethod
        procedure SomeInterfaceSomeMethod;   // ISomeInterface.SomeMethod
        procedure OtherInterfaceSomeMethod;  // IOtherInterface.SomeMethod
      end;
    

    【讨论】:

      【解决方案2】:

      确实有可能。该技术称为Method Resolution Clause

      【讨论】:

      • 谢谢!我知道我在某处看到过类似的东西,但我不记得它是如何做到的。