2
interface I1
{
}
class ClassOfI1 : I1
{
}

interface I2
{
    I1 ABC { get; set; }
}
class ClassOfI2 : I2
{
    public ClassOfI1 ABC { get; set; }
}

次のエラーをスローします。

「ns.ClassOfI2」は、インターフェース メンバー「ns.I2.ABC」を実装していません。「ns.ClassOfI2.ABC」は「ns.I2.ABC」を実装できません。「ns.I1」の一致する戻り値の型がないためです。

なんで?(そして、これを回避する方法はありますか?ClassOfI1インターフェースだけでなく、そこが欲しいです。)

4

4 に答える 4

1

メソッドが I1 ではなく ClassOfI1 を返すためです。インターフェイス自体を返す必要があります。後で具体的なクラス (この場合は ClassOfI1) を返すことができますが、実装の定義はインターフェイスの定義と一致する必要があります。コードを次のように変更します。

interface I1
{
}

class ClassOfI1 : I1
{
}

interface I2
{
    I1 ABC { get; set; }
}

class ClassOfI2 : I2
{
    public I1 ABC { get; set; }
}

そしてそれはうまくいくはずです。

次のように、コードの後半でいつでも ClassOfI1 のインスタンスを使用できます。

var c1 = new ClassOfI1();
var c2 = new ClassOfI2();
c2.ABC = c1;
于 2013-09-11T21:00:03.670 に答える