Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#泛型和运行时的类型安全_C#_.net_Generics_Types_Type Safety - Fatal编程技术网

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) {
        // ...
    }
    // ...
}