C#不实现继承的抽象成员

C#不实现继承的抽象成员,c#,C#,关于这个问题,我搜索了很多。有很多方法可以解释,但它们对我来说并不实用 我有这门课: public class ArcHydro : Oatc.OpenMI.Sdk.Backbone.LinkableComponent { public void Initialize(Argument[] properties) { _timeStamps = new ArrayList(); _culture = CultureInfo.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`[])'`
我怎样才能解决它?
我在上课前使用了override,但错误仍然存在。

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

public abstract void Initialize(IArgument[] properties);
public void Initialize(Argument[] properties);
// --------------------^ Notice the missing 'I'.
但您正在实施:

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();
    }
}
public override void Initialize(IArgument[] properties)
{
...
}

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

public abstract void Initialize(IArgument[] properties);
public void Initialize(Argument[] properties);
// --------------------^ Notice the missing 'I'.
但您正在实施:

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();
    }
}
public override void Initialize(IArgument[] properties)
{
...
}

您的实现函数应该具有“override”关键字和相同的参数

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

您的实现函数应该具有“override”关键字和相同的参数

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

实现方法的签名应该与抽象方法的签名完全相同。因此,你应该这样做:

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();
    }
}
public override void Initialize(IArgument[] properties)
{
...
}
请注意,您的输入参数应该来自您在抽象类中提到的IArgument[]类型,并记住将其标记为重写


遵循

上的示例,实现方法的签名应与抽象方法的签名完全相同。因此,你应该这样做:

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();
    }
}
public override void Initialize(IArgument[] properties)
{
...
}
请注意,您的输入参数应该来自您在抽象类中提到的IArgument[]类型,并记住将其标记为重写


按照

上的示例,您的方法的参数类型为
参数[]
,而抽象方法的参数类型为
iagument[]
。它们没有相同的签名,因此您没有实现抽象方法。您还需要
覆盖
修饰符-如果您现在尝试应用该修饰符,它会告诉您,由于参数类型问题,它找不到您试图覆盖的方法。您的方法的参数类型为
参数[]
,而抽象方法的参数类型为
IArument[]
。它们没有相同的签名,因此您没有实现抽象方法。您还需要
override
修饰符-如果此时尝试应用该修饰符,它会告诉您,由于参数类型问题,它找不到您尝试重写的方法。第三个问题,为什么Initialize方法在命名空间内?第三个问题,为什么Initialize方法在命名空间内?