2

これはおそらく例で最もよく説明されます。

DogとCatの2つの構造体があり、どちらもIAnimalに属しています。

IAnimalには、IAnimalから継承するオブジェクトを関数と呼ばれるものと同じ型に変換するConvertFrom(IAnimal)関数があります。

例えば:

Dog.ConvertFrom(cat)を呼び出すと、catからフィールドがマップされた犬が得られます。

Cat.ConvertFrom(dog)を呼び出すと、dogからフィールドがマップされた猫が表示されます。

インターフェイスでこれを行う方法はありますか?関数が関数を実装するクラスと同じ型を返す必要があることを指定しますか?

私はそれを単に次のように書くことを考えました:

IAnimal ConvertFrom(IAnimal)

しかし、IAnimalとしてではなく、犬または猫として戻ってくることを指定できるようにしたいと思います(したがって、さらなるキャストを軽減します)。

4

1 に答える 1

6

静的ポリモーフィズムを実現するためのCuriously Recurring Template Patternのようなものについて話しているかもしれません。ジェネリックを使用して、次のことを行うことができます。

public interface IAnimal

public interface IAnimal<T> : IAnimal where T : IAnimal<T>

public class Dog : IAnimal<Dog>

public class Cat : IAnimal<Cat>

次に、メソッドは次のようになります。

T ConvertFrom(IAnimal someAnimal)
于 2013-03-02T20:30:35.757 に答える