繁体   English   中英

运行时的C#泛型和类型安全

[英]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子类,例如TennisBadmintonHockey 由于您希望在编译时输入类型安全性,因此应使用后一种方法。

您可以执行以下操作:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM