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方法在命名空间内?