- PR -

interfaseを実装できない

1
投稿者投稿内容
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-31 10:07
msoです。
C#の勉強をしているのですが、良くわからない箇所があり
悩んでいたのですが結局わからないままなので誰か相談に乗ってください。


コード:

interface.cs

using System;
namespace foo
{
interface ItestInterface
{
hoge GetField();
}
}


aaa.cs

using System;
namespace foo
{
public class ConnectTest : ItestInterface
{
private int process ;
private hoge objRowSelect = null;
//コンストラクタ
public Connecthoge(int PROCESS)
{
process = PROCESS;
}
public bool SetVTField()
{
ItestInterface segface = null;
switch (process)
{
case 10:
case 11:
case 12:
case 13:
segface = new testMyPattern(process);
break;
default:
return false;
break;
}
objRowSelect = segface.GetField();
return true;
}
}
}

bbb.cs

using System;
namespace foo
{
public class TestMyPattern
{
public SegmentMyPattern(int PROCESS)
{
hoge objRowSelect = new hoge();
process = PROCESS;
}
public hoge GetField()
{
return objRowSelect = null;
}
}

}



というようなソース(会社で使っているソースなので修正しています・・動かないかも?)
を実行すると'ConnectTest'はインターフェースメンバ'ItestInterface.GetField()を実装しません。'
というエラーが出力されます。
そこでヘルプで調べてみたところ
コンパイラ エラー CS0535
というエラーであることはわかりました。
つまりはinterfaseで宣言しているGetField()をConnectTestの中で
未使用だとこのエラーが出ると認識しています(間違っているかなぁ?)
ただ、ConnectTestで.GetField()を使っているはずなのですが
なぜこのエラーが出力されるのでしょうか?

何か心当たりがありそうなことがあれば教えてください。
よろしくお願いします。

[追加]
転記ミス修正

[ メッセージ編集済み 編集者: mso 編集日時 2004-03-31 10:23 ]

[ メッセージ編集済み 編集者: mso 編集日時 2004-03-31 10:27 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-03-31 10:13
 インタフェースの、定義と使用で名前が違うのですが、転記ミス?
> interface ISegmentInterface
> public class ConnectTest : ItestInterface
一郎
ぬし
会議室デビュー日: 2002/10/11
投稿数: 1081
投稿日時: 2004-03-31 10:19
ItestInterface(ISegmentInterfaceの間違い?)を実装しているのはConnectTestクラスです。
ですので、ConnectTestがItestInterfaceで宣言されている機能を提供しなければなりません。
ConnectTestの中でGetField()という名前のメソッドを呼ぶとか呼ばないとかではなく、ConnectTestのメンバとしてGetField()というメソッドを用意しなければならないということです。
nodera
大ベテラン
会議室デビュー日: 2003/09/08
投稿数: 200
投稿日時: 2004-03-31 10:20
ISegmentInterface -> ItestInterface
SegmentMyPattern -> testMyPattern

と間違えていたにせよ、class ConnectTest に GetField()の実装が無いからエラーになっているのでしょう。Interfaceの理解が間違っているのでは。。。

#かぶったw

[ メッセージ編集済み 編集者: nodera 編集日時 2004-03-31 10:20 ]
なちゃ
ぬし
会議室デビュー日: 2003/06/11
投稿数: 872
投稿日時: 2004-03-31 10:29
引用:

msoさんの書き込み (2004-03-31 10:07) より:
を実行すると'ConnectTest'はインターフェースメンバ'ItestInterface.GetField()を実装しません。'

つまりはinterfaseで宣言しているGetField()をConnectTestの中で
未使用だとこのエラーが出ると認識しています(間違っているかなぁ?)
ただ、ConnectTestで.GetField()を使っているはずなのですが
なぜこのエラーが出力されるのでしょうか?
お願いします。


インターフェイスの名前が違うのはおいといて…

うーん、インターフェイスについてヘルプなり見たらサンプルないですかね?
「実装していません」とは、その通り「インターフェイスで定義しているメソッドを」クラスで実装していないという意味です。
「使用していない」ではありません。

今回の例では、インターフェイスを実装(C#とかでは継承って言う?)する必要があるのはSegmentMyPatternであり、ConnectTestではありません。
あるインターフェイスをクラスが実装する(継承する)ということは、そのインターフェイスが定義しているメソッドを実装する必要があるということです。
mso
ぬし
会議室デビュー日: 2003/12/04
投稿数: 496
お住まい・勤務地: 宮城
投稿日時: 2004-03-31 10:51
みなさまありがとうございました。
Class ConnectTestにテスト用のメンバとしてGetField()を追加したところ
別のエラーがでてきました(涙)

まだまだわかっていませんが、早く理解したいとおもいます。
ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)