C#没有实现继承的抽象成员

时间:2017-10-22 09:06:13

标签: c#

我非常关注这个问题。有许多方法可以解释,但它们对我来说无法使用。

我有这堂课:

public class ArcHydro : Oatc.OpenMI.Sdk.Backbone.LinkableComponent
{
   public void Initialize(Argument[] properties)
        {
            _timeStamps = new ArrayList();
            _culture = CultureInfo.CurrentCulture.NumberFormat;
            _links = new Hashtable();
            readArcHydro();
        }
}

继承此类

namespace Oatc.OpenMI.Sdk.Backbone
{
    public abstract void Initialize(IArgument[] properties);
}

错误是

`'CUAHSI.OpenMI.ArcHydro' does not implement inherited abstract member 
'Oatc.OpenMI.Sdk.Backbone.LinkableComponent.Initialize(OpenMI.Standard.IArgument`[])'`

我该如何解决? 我在课前使用了覆盖,但错误仍然存​​在。

3 个答案:

答案 0 :(得分:4)

你有两个问题。你应该实施:

public abstract void Initialize(IArgument[] properties);

但你正在实施:

public void Initialize(Argument[] properties);
// --------------------^ Notice the missing 'I'.

其次,您错过了override关键字。所以你的课应该是这样的:

public class ArcHydro : Oatc.OpenMI.Sdk.Backbone.LinkableComponent
{
    public override void Initialize(IArgument[] properties)
    {
        _timeStamps = new ArrayList();
        _culture = CultureInfo.CurrentCulture.NumberFormat;
        _links = new Hashtable();
        readArcHydro();
    }
}

答案 1 :(得分:1)

你的实现功能应该有"覆盖"关键字和相同的参数。

public override void Initialize(IArgument[] properties)
{
   //...
} 

答案 2 :(得分:0)

实现方法的签名应与抽象方法完全相同。所以你应该这样:

public override void Initialize(IArgument[] properties)
{
...
}

请注意您的输入参数应该来自您在抽象类中提到的类型IArgument [],并记住将其标记为覆盖

按照Microsoft

上的示例操作