我认为我需要接口和抽象类提供的功能。
我正在创建要在模拟中使用的模型。每个模型都包含在一个C#类中,该类实现了一个IModel接口(我的设计是可以修改的)。我还创建了一个c ++非托管Win32 DLL,它充当我的C#模型类和模拟环境之间的桥梁。模型类通过COM调用,因此需要接口。
我刚收到一个新要求,即这些模型类应该可以通过Web服务独立于模拟环境进行调用。现在这些模型相当敏感,客户端已请求由客户端配置并在服务器上执行*。我认为如果我使模型类继承自抽象类,然后在服务器上创建一个Web服务方法,这将是可能的:
public AbstractModel executeModel(AbstractModel modelForExecution)
从客户端接收模型对象,执行它并用结果填充它。
但是 - 我不能使用抽象类,因为模型需要COM实现的接口。
我如何协调这两项要求?我被告知可以让一个类实现一个接口并让该类派生自一个抽象类,但我找不到任何这样的例子。如果可能,语法是什么?如果不可能,我该怎么办?
*模型类实际上调用了古老的fortran可执行文件,因此类的模型配置并没有提供有关模型如何工作的太多信息。
答案 0 :(得分:5)
public abstract class Base{}
public interface IBase{}
public Something: Base, IBase{}
// the interface needs to go after the base class
答案 1 :(得分:1)
我会尝试让你的抽象类实现接口(并将方法作为抽象)。然后每个实现只是抽象类的子类。我认为这应该有效。
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'关键字(编译器会告诉您)。