【问题标题】:How can I have a class that implements an interface and inherits from an abstract class? (C# .NET 3.5)我怎样才能拥有一个实现接口并从抽象类继承的类? (C# .NET 3.5)
【发布时间】:2009-03-19 05:31:44
【问题描述】:

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

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

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

public AbstractModel executeModel(AbstractModel modelForExecution)

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

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

如何调和这两个要求?有人告诉我,可以让一个类实现一个接口并让该类派生自一个抽象类,但我找不到任何例子。如果可能的话,语法是什么?如果不可能,我还能做什么?

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

【问题讨论】:

    标签: c# com interface abstract-class


    【解决方案1】:
    public abstract class Base{}
    public interface IBase{}
    public Something: Base, IBase{} 
    // the interface needs to go after the base class
    

    【讨论】:

      【解决方案2】:

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

      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”关键字(编译器会告诉您)。

      【讨论】:

      • 唯一可能出现的问题是通过 COM 从我的非托管类调用派生类。它可能有效,但我认为此时另一种解决方案更简单。感谢您的回复。
      猜你喜欢
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 2012-07-15
      • 2012-04-11
      • 2022-11-18
      • 2013-10-17
      • 1970-01-01
      • 2011-11-03
      相关资源
      最近更新 更多