[英]C# Generics and Type Safety at Runtime
我什至不十分确定如何最好地表达问题,但我会解决。
我有一个目标,但是我不确定如何实现,甚至无法实现。
假设我有一个Sport
类型。 然后是Team<Sport>
和Player<Sport>
。 我想做到的是,只要我有一个团队和一个玩家通过方法进行交互,它们只有在具有相同的<Sport>
类型时才能这样做。
例如: Team<Sport>.AddPlayer( Player<Sport> player)
<-我如何做到这一点,所以只有当两个Sport
属于相同类型时才能调用它? 如果必须从Sport
派生新类型,那可以工作,但是我希望基于运行时的实例来实现。
我知道编译器不会提前知道实例,所以我想知道您是否可以使用某种类型安全魔术来做到这一点,因此我不必每次都自己比较类型。
您不能将实例放入C#中的<>
中。 为了实现“类型安全”,您需要具有称为“ Tennis
,“ Hockey
,“ Badminton
等的实际“类型”。否则,编译器无法区分运动。
您可以在运行时检查运动类型是否相同,或者创建Sport
子类,例如Tennis
, Badminton
和Hockey
。 由于您希望在编译时输入类型安全性,因此应使用后一种方法。
您可以执行以下操作:
var tennisTeam = new Team<Tennis>();
tennisTeam.AddPlayer(new Player<Tennis>());
Team
可以这样定义:
class Team<TSport> where TSport : Sport {
public void AddPlayer(Player<TSport> player) {
// ...
}
// ...
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.