C#泛型和运行时的类型安全
我甚至不确定如何最好地表达这个问题,但我会看看我能做些什么 我有一个目标,但我不确定如何实现,或者我是否能够实现 假设我有一个类型C#泛型和运行时的类型安全,c#,.net,generics,types,type-safety,C#,.net,Generics,Types,Type Safety,我甚至不确定如何最好地表达这个问题,但我会看看我能做些什么 我有一个目标,但我不确定如何实现,或者我是否能够实现 假设我有一个类型Sport。然后是一个团队和一个玩家。我希望这样,每当我有一个团队和一个玩家通过方法进行交互时,只有当他们有相同的类型时,他们才能这样做 例如:Team.AddPlayer(Player-Player)在C#中不能将实例放入。要实现“类型安全”,您需要实际的“类型”称为网球,曲棍球,羽毛球等。否则编译器无法区分运动 要么在运行时检查运动类型是否相同,要么创建运动的子类
Sport
。然后是一个团队
和一个玩家
。我希望这样,每当我有一个团队和一个玩家通过方法进行交互时,只有当他们有相同的
类型时,他们才能这样做
例如:
Team.AddPlayer(Player-Player)
在C#中不能将实例放入
。要实现“类型安全”,您需要实际的“类型”称为网球
,曲棍球
,羽毛球
等。否则编译器无法区分运动
要么在运行时检查运动类型是否相同,要么创建运动
的子类,如网球
、羽毛球
和曲棍球
。因为您希望在编译时实现类型安全,所以应该使用后一种方法
您可以执行以下操作:
var tennisTeam = new Team<Tennis>();
tennisTeam.AddPlayer(new Player<Tennis>());
哦,对了,我完全忽略了这一部分——当然它们必须是类型,而不是实例。不过,这是有道理的,我想,这也实现了我想要的。谢谢
class Team<TSport> where TSport : Sport {
public void AddPlayer(Player<TSport> player) {
// ...
}
// ...
}