2017-10-22 116 views
0

私はこの質問について非常に調査しました。説明される方法はたくさんありますが、それらは私のために使えませんでした。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`[])'` 

のですか? クラスの前にオーバーライドを使用しましたが、エラーは残ります。

+1

あなたのメソッドのパラメータ型は 'Argument []'で、抽象メソッドのパラメータ型は 'IArgument []'です。彼らは同じ署名を持っていないので、抽象メソッドを実装していません。 'override'修飾子も必要です。現時点で適用しようとすると、パラメータタイプの問題のため、オーバーライドしようとしているメソッドが見つからないことがわかります。 –

答えて

4

あなたには2つの問題があります。あなたは、実装する必要があります。

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(); 
    } 
} 
+0

3番目の問題、Initializeメソッドが名前空間の中にある理由 –

1

あなたの実装関数は、 "override"キーワードと同じ引数を持つ必要があります。

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

実装されたメソッドのシグネチャは、抽象的なものとまったく同じである必要があります。したがって、あなたはこのようにそれを持っている必要があります。

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

あなたは抽象クラスで述べたと覚えているIArgument []はオーバーライドとしてそれをマークするために、あなたの入力引数の型からあるべき注意を払ってください

フォローexample on Microsoft

関連する問題