2

我有一个通用“设备”类型的抽象基类,并希望要求派生的特定设备类根据它们各自的差异初始化一个列表。

当将派生类设置为活动时,它必须通过列表将参数也设置为活动。每个派生类都会将自己的参数插入到列表中。

以下是相关代码:

基类:

        abstract public class Device : Common, IDisposable
        {
          abstract public Boolean bActive
          {
            get;
            set;
          }

          abstract List<Parameters> ActiveParameters;
          ...
        }

我不希望在基类中初始化 List,因为我不知道哪些参数将从派生类插入到列表中。这段代码产生一个错误,说我不能有一个抽象字段,我明白这一点,但是有没有办法要求派生类从基类初始化一个字段?

4

2 回答 2

3

这段代码产生一个错误,说我不能有一个抽象字段,我明白这一点,但是有没有办法要求派生类从基类初始化一个字段?

如果这需要实现,它应该是您 API 的一部分。要处理此问题,您可以将其设为受保护的属性。这将强制它由所有派生类实现。

protected abstract List<Parameters> ActiveParameters { get; }
于 2013-04-17T19:55:15.790 回答
2

如果这是关于初始化列表,那么您可以通过将该列表放入基类的构造函数(或所有构造函数,如果您有更多构造函数)中来强制执行该操作。

就像是:

public abstract class Device : Common, IDisposable
{
    protected Device(List<Parameters> activeParameters)
    {
        ActiveParameters = activeParameters;
    }

    protected List<Parameters> ActiveParameters { get; private set; }
}

然后派生类将被迫执行以下操作:

public class ConcreteDevice : Device
{
    public ConcreteDevice()
       : base(new List<Parameters>())
    {}
}
于 2013-04-17T21:07:39.743 回答