実装クラスのインターフェイス プロパティにアクセスしようとすると、問題が発生します。問題は、実行時に特定の (Cat) タイプしか持っていないため、キャストしようとするとアプリが壊れてしまうことです。
ここに私が持っているものがあります:
public class Animal {}
public class Cat : Animal {}
public interface IPetSitter {}
public interface IPetSitter<T> IPetSitter where T : Animal {
T Pet { get; set; }
}
public class Kid { }
public class NeighborhoodKid : Kid, IPetSitter<Animal> {
Animal Pet { get; set; }
}
// --- Implementation ---
// Kid Timmy is instantiated elsewhere
// Animal type "A" is passed in dynamically
if (Timmy is IPetSitter) {
((IPetSitter<A>)Timmy).Pet = new A();
}
タイプが一致しない場合、このキャストはエラーになります。私はこのようなことをしたいと思います:
public interface IPetSitter {
object Pet { get; set; }
}
public interface IPetSitter<T> : IPetSitter where T : Animal {
new T Pet { get; set; }
}
// --- Implementation ---
NeighborhoodKid Timmy = new NeighborhoodKid();
((IPetSitter)Timmy).Pet = new Cat();
しかし、これにより、IPetSitter を実装するものはすべて [object Pet] プロパティと [Cat Pet] プロパティの両方を持つようになります。
アイデアをいただければ幸いです。ありがとう。
更新:最初はもっと明確にするべきでしたが、クラスを作成することもあれば、Kid
クラスを作成することもありNeighborhoodKid
ます。そのため、にキャストする必要がありIPetSitter<T>
ます。私が作成するすべての子供が座っているペットになるわけではありません。これは不気味に聞こえ始めています。