尝试访问实现类上的接口属性时遇到问题。问题是,我在运行时只有特定的 (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>
. 并非我创造的所有孩子都会坐着宠物。这听起来令人毛骨悚然。