c# – 在另一个泛型方法中是否允许调用泛型方法?
我正在与Unity进行RTS游戏.我的游戏中有很多类型的资源,例如树,农场.每个资源都是一个GameObject,并拥有自己的主脚本来控制它.
防爆.我想要收获一棵树,我称之为. gameObject.GetComponent<Tree>().Harvest(); 如果我想收获农场,我会调用相同的脚本,但将“Tree”更改为“Farm”,这很好,但代码将被复制.所以我通过使用这样的泛型方法来抽象它. void Harvest<T>(){ gameObject.GetComponent<T>().Harvest(); } 但是C#编译器不允许我这样做.我想知道是否可以定义使用泛型方法的泛型方法?如果没有,有没有办法像这样抽象我的代码?谢谢. 错误信息:
解决方法
问题在于……
void Harvest<T>(){ gameObject.GetComponent<T>().Harvest(); } … C#编译器不知道T将是哪种具体类型.因此,它不知道会有一个Harvest可用的方法,也不知道它的确切声明(它是否返回void或bool或其他东西?它是否有可选参数?).因为C#是一种强类型语言,所以必须在编译时知道它.这使您确信一切都会在运行时顺利进行. 解决方案是通过指定泛型类型约束为编译器提供提示.为此,您必须声明一个接口,并让具有Harvest方法的组件实现它. public interface IHarvestable { void Harvest(); } 用以下内容指定约束: void Harvest<T>() where T : IHarvestable { gameObject.GetComponent<T>().Harvest(); } 在您控制基类的其他情况下,您还可以在基类中声明所需的方法(可能是抽象的),并在generic type constraint中指定基类而不是接口. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |