代码之家  ›  专栏  ›  技术社区  ›  Alex

我如何拥有一个实现接口并从抽象类继承的类?(C.NET 3.5)

  •  0
  • Alex  · 技术社区  · 16 年前

    我有一种情况,我认为我需要接口和抽象类提供的功能。

    我正在创建要在模拟中使用的模型。每个模型都包含在一个实现IModel接口的C类中(我的设计就是这样修改它)。我还创建了一个C++非托管Win32 DLL,它充当了我的C类模型类和仿真环境之间的桥梁。模型类通过COM调用,因此需要一个接口。

    我刚收到一个新的要求,这些模型类应该可以通过独立于模拟环境的Web服务调用。现在,这些模型相当敏感,客户机请求由客户机配置它们并在服务器*上执行。我认为,如果我使模型类从抽象类继承,然后在服务器上创建一个Web服务方法,这是可能的:

    public AbstractModel executeModel(AbstractModel modelForExecution)
    

    从客户机接收模型对象,执行它并用结果填充它。

    但是-我不能使用抽象类,因为模型需要一个用于COM实现的接口。

    如何协调这两个要求?我被告知有可能让一个类实现一个接口,并让该类从抽象类派生,但我找不到任何这样的例子。如果可能,语法是什么?如果不可能,我该怎么办?

    *模型类实际上调用了一个古老的Fortran可执行文件,因此类的模型配置不会提供太多关于模型如何工作的信息。

    2 回复  |  直到 16 年前
        1
  •  5
  •   eglasius    16 年前
    public abstract class Base{}
    public interface IBase{}
    public Something: Base, IBase{} 
    // the interface needs to go after the base class
    
        2
  •  1
  •   tsimon    16 年前

    我将尝试让您的抽象类实现接口(并将该方法作为抽象方法)。然后,每个实现只是抽象类的子类。我认为这应该管用。

    public interface IModel {
      void doSomething();
    }
    
    public abstract class AbstractModel : IModel {
      public abstract void doSomething();
    }
    
    public class MyModel : AbstractModel {
      public void doSomething() {
        // code goes here
      }
    }
    

    您可能需要在实现方法上使用“overrides”关键字(编译器会告诉您)。