2

このようなものを実装することは可能ですか?クラスSomeClassの宣言でこのコードに問題があります。

私が受け取っている例外は次のとおりです。

'WindowsFormsApplication1.SomeClass'は、インターフェイスメンバー'WindowsFormsApplication1.IB.SomeGetter'を実装していません。「WindowsFormsApplication1.SomeClass.SomeGetter」は、「WindowsFormsApplication1.MyClass」の一致する戻りタイプがないため、「WindowsFormsApplication1.IB.SomeGetter」を実装できません。

私のコード:

public interface IA
{ }

public interface IB
{
    MyClass<IA> SomeGetter { get; }
}

public class A : IA
{ }

public class MyClass<T>
    where T : IA
{ }

public class SomeClass : IB
{
    public MyClass<A> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}

それを行う方法はありますか?

4

2 に答える 2

5

これを実現するには、インターフェイス ( ) を導入して共分散MyInterfaceを利用する必要があります。

public interface IA
{ }

public interface IB
{
    MyInterface<IA> SomeGetter { get; }
}

public class A : IA
{ }

public interface MyInterface<out T>
    where T : IA
{ }

public class MyClass<T> : MyInterface<T> where T : IA
{ }

public class SomeClass : IB
{
    public MyInterface<IA> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}
于 2012-07-03T11:24:33.897 に答える
0

MyClass のインターフェースを導入したい場合があります。

public interface IMyClass<out T> where T : IA
{

}

class MyClass<T> : IMyClass<T> where T : IA
{
}

インターフェイスの「out」キーワードに注意してください。それからあなたは書くことができます

public class SomeClass : IB
{
    public IMyClass<A> SomeGetter
    {
        get { return new MyClass<A>(); }
    }
}
于 2012-07-03T11:32:16.887 に答える