gpt4 book ai didi

c# 重载方法的泛型函数

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:27 25 4
gpt4 key购买 nike

我有两个方法,FollowForce() 和 AvoidForce(),它们被重载以接受 NavObject 或 GameObject。有没有办法简化 Follow() 函数以接受这两种类型?

public void Follow(NavObject target){ 
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}

public void Follow(GameObject target){
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}

我尝试了以下方法,但得到了无法将“T”表达式转换为类型“NavObject”:

public void Follow <T>(T target){ 
if(isFollowing){Body.AddForce(FollowForce(target));}
if(isAvoiding){Body.AddForce(AvoidForce(target));}
}

最佳答案

可能,您甚至不需要为此使用泛型。您还可以为您的 NavObjectGameObject 创建一个接口(interface)来实现,其中包含您的 FollowForceAddForce 方法。

public void Follow(IHaveForce target)
{
if (isFollowing)
{
Body.AddForce(FollowForce(target));
}
if (isAvoiding)
{
Body.AddForce(AvoidForce(target));
}
}

然后你的其他方法需要这样设置:

public Force FollowForce(IHaveForce target)
{
// Do your work...
}

public Force AvoidForce(IHaveForce target)
{
// Do your work...
}

您需要使用泛型的唯一原因是,如果您希望始终强制使用相同的类型。在您提供的最小场景中,这似乎不是您所需要的。如果无论如何你都想使用泛型,你也可以让你的泛型类型实现 IHaveForce

关于c# 重载方法的泛型函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45599034/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com